Tidak ada yang salah dengan menggunakan SQL dinamis jika Anda harus. Bahkan dalam beberapa keadaan itu adalah satu-satunya pilihan yang Anda miliki. Ini lebih dari rekomendasi untuk tidak menggunakannya karena ya itu dapat menyebabkan injeksi SQL jika input Anda tidak disanitasi, dan ya menggunakan SQL dinamis dalam modul yang dipanggil sering dapat merusak kinerjanya.
Saya tidak berpikir ada contoh konkret sebagai per se tetapi saya akan mengatakan ini: Cobalah untuk mencapai apa yang Anda setelah menggunakan pertanyaan dan pernyataan reguler pertama - hanya setelah Anda kehabisan semua jalan lain melakukannya secara dinamis. Ingatlah bahwa mengeksekusi string SQL dinamis dilakukan dalam sesi pengguna terpisah ke modul yang memanggilnya - sehingga Anda dapat mengalami masalah izin di mana Anda tidak mengharapkannya.
Jika Anda khawatir tentang kinerja; menguji. Jika Anda khawatir tentang keamanan; validasi input Anda. Tidak ada benar atau salah - hanya bahwa Anda menggunakan penilaian terbaik Anda berdasarkan informasi dan alat yang Anda miliki saat itu.
Ini seperti kebanyakan fitur dbms, jika Anda menggunakannya dalam situasi yang tepat itu berfungsi dengan baik, situasi yang salah melakukannya dengan buruk.
Pro: Beberapa hal tidak bisa dilakukan tanpa itu. Biasanya saya hanya menemukan ini untuk pekerjaan administrasi, dan bukan kode aplikasi. Beberapa perintah sistem tidak mengizinkan parameter digunakan sebagai input. Jadi misalnya jika saya perlu menjalankan sesuatu melalui sproc terhadap setiap database, pada banyak contoh dengan database yang tidak diketahui, dan perintah tidak menerima parameter, saya biasanya menyelesaikan ini melalui SQL dinamis. Namun ini lebih merupakan hal di Sybase ASE daripada MSSQL.
Cons: Saya tidak akan banyak membahasnya, karena saya pikir kita semua sudah mengetahuinya, tetapi mungkin ada beberapa risiko untuk injeksi SQL jika digunakan secara tidak benar. Yang lebih besar bagi saya adalah bahwa kueri akan diperlakukan seperti apa adanya, kueri adhoc unik, dan bukan bagian dari paket kueri yang dikompilasi. Untuk sesuatu yang berjalan sesekali, bukan masalah besar. Untuk sesuatu yang dieksekusi ratusan kali semenit dan yang akan memiliki banyak sql unik, itu akan menghasilkan banyak rencana kueri yang berpotensi tidak perlu, menghabiskan siklus, dan mempersingkat waktu cache rencana yang valid.
sumber
Jangan gunakan SQL Dinamis.
99% waktu Dynamic SQL digunakan karena kurangnya pengetahuan tentang cara menggunakan parameter opsional dalam prosedur tersimpan, sisanya 1% dari waktu digunakan untuk membuat kueri yang sangat kompleks untuk laporan yang tidak dipahami pelanggan. bahkan. Kutukan dan Berkat dari Dynamic SQL tidak menunjukkan contoh mengapa itu akan menjadi ide yang baik untuk menggunakannya, sebaliknya hanya menyarankan bahwa itu bermasalah karena meningkatkan kompleksitas untuk debugging, memelihara, belum lagi risiko keamanan SQL Injeksi, kinerja yang buruk bukan karena cache tetapi praktik buruk yang menyertainya seperti menggunakan tabel sementara dan kursor yang tentu saja malas dan naifprogrammer akan menyalahgunakan. Tidak ada yang namanya fleksibilitas untuk menulis query seperti itu, SQL adalah bahasa deklaratif dan harus ditangani seperti itu.
Kemalasan adalah akar dari semua kejahatan.
Paradoksnya jawaban ini akan peringkat di yang paling downvoted .
sumber