Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Men-debug sql dinamis panjang di SQL Server 2008

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang terjadi pada ID kunci utama ketika melewati batas?

  2. SQL Server - menghentikan atau menghentikan eksekusi skrip SQL

  3. Gabungkan beberapa hasil dalam subkueri menjadi satu nilai yang dipisahkan koma

  4. Tidak dapat mengimpor data dari excel 2003 ke database menggunakan fungsi openrowset

  5. Menggunakan LIKE di sp_executesql