Cetak Parameter dalam SQL Dinamis

9

Saya telah menggunakan SQL dinamis untuk banyak tugas dan terus-menerus mengalami masalah yang sama: Mencetak nilai variabel yang digunakan di dalam pernyataan Dynamic T-SQL.

MISALNYA:

Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int
select @DebugMode=1,@Foobar=364556423

set @SQL='Select @Foobar'
set @Params=N'@Foobar int'

if @DebugMode=1 print @SQL
exec sp_executeSQL @SQL,@Params
    ,@Foobar=@Foobar

Hasil cetak dari kode di atas hanyalah "Select @Foobar". Apakah ada cara untuk secara dinamis mencetak nilai & nama variabel dari sql yang dieksekusi? Atau saat melakukan pencetakan, ganti parameter dengan nilai aktualnya sehingga SQL dapat dijalankan kembali?

Saya telah bermain dengan membuat satu atau dua fungsi untuk mencapai sesuatu yang serupa, tetapi dengan konversi tipe data, masalah pemotongan pola, dan solusi non-dinamis. Saya ingin tahu bagaimana pengembang lain menyelesaikan masalah ini tanpa mencetak masing-masing variabel secara manual.

Brent D
sumber

Jawaban:

4

Salah satu cara untuk menyelesaikan ini mungkin adalah sesuatu yang telah Anda lakukan, dan itu adalah mengganti baris Anda:

if @DebugMode=1 print @SQL

dengan

if @DebugMode=1 print @SQL + ' ' + convert(nvarchar(max), @Foobar)

Dan Anda harus melakukannya dengan cara ini untuk semua variabel Anda, Anda harus mengonversinya secara manual untuk menghindari kesalahan konversi.

Anda juga bisa menggunakan RAISERROR dengan cara serupa:

if @DebugMode=1 RAISERROR (N'We used a value of %d for @Foobar', 10, 1, @Foobar)

HTH

SQLRockstar
sumber
Sayangnya ini berarti menulis secara manual menggantikan setiap variabel yang digunakan dalam pernyataan dinamis. Ini bisa menjadi sulit ketika 20+ variabel digunakan dan diubah atau ketika beberapa pernyataan sql dinamis sedang dibangun secara bersamaan.
Brent D