Ketika dipaksa untuk menggunakan sql dinamis dalam proc yang disimpan, kami melakukan hal berikut. tambahkan variabel input debug yang merupakan bidang bit. Jika 0, pernyataan exec akan diproses jika 1 maka Anda akan mendapatkan pernyataan cetak sebagai gantinya. Saya sarankan Anda melakukan sesuatu yang mirip dengan debug. Alih-alih mengeksekusi, cetak hasil SQL Anda atau mungkin masukkan SQL ke tabel karena tampaknya terjadi dalam satu lingkaran. Kemudian Anda dapat memeriksa sql yang dibuat dan melihat di mana kesalahannya.
Declare debug bit
set debug = 1
...
if debug = 1 Begin Print @SQL End
Else
Begin Exec (@sql) End
Atau
Buat tabel bernama mydynamiccode_logging (dengan kolom sql sama panjangnya dengan statment max sql, rundatecolumn dan kolom lain apa pun yang Anda anggap perlu (saya akan mempertimbangkan variabel input yang digunakan untuk membuat statment sql, pengguna, aplikasi) jika lebih dari satu menggunakan potongan kode ini)
Sebelum Anda menjalankan pernyataan exec jalankan sesuatu seperti ini:
insert mydynamiccode_logging (sql, rundate)
values (@sql, getdate())
Sekarang Anda juga dapat menambahkan bidang bit debug dan hanya mencatat ketika Anda telah mengubahnya ke mode debug atau Anda selalu dapat masuk, tergantung pada sistem dan berapa banyak waktu ekstra yang diperlukan untuk melakukannya dan seberapa keras sistem lainnya. Anda tidak ingin memperlambat prod secara signifikan dengan masuk.