Saya memiliki sepotong SQL dinamis yang perlu saya jalankan, saya kemudian perlu menyimpan hasilnya ke dalam variabel.
Saya tahu saya dapat menggunakan sp_executesql
tetapi tidak dapat menemukan contoh yang jelas tentang bagaimana melakukan ini.
tsql
dynamic-sql
JohnIdol
sumber
sumber
@retvalOUT=@retval OUTPUT
? Bukankah seharusnya parameter ketiga darisp_executesql
adil@retval OUTPUT
?EXEC sp_executesql @sSQL, @ParmDefinition, @retval OUTPUT;
sumber
insert into @tab
. Jika Anda mencobainsert into @tab
dan menjalankan lebih dari satuexecute sp_executesql
, dengan sql yang berbeda,select * from @tab
hanya menunjukkan hasil eksekusi pertamasumber
Nyatakan @variabel int
Exec @variable = proc_name
sumber
Nilai pengembalian umumnya tidak digunakan untuk "mengembalikan" hasil tetapi untuk mengembalikan keberhasilan (0) atau nomor kesalahan (1-65K). Semua di atas tampaknya menunjukkan bahwa sp_executesql tidak mengembalikan nilai, yang tidak benar. sp_executesql akan mengembalikan 0 untuk sukses dan nomor lainnya untuk kegagalan.
Di bawah ini, @ i akan mengembalikan 2727
SSMS akan menampilkan Msg 2727 ini, Level 11, State 1, Line 1 Tidak dapat menemukan indeks 'NonExistantStaticsName'.
sumber
DECLARE @ValueTable TABLE (Nilai VARCHAR (100))
sumber
Jika Anda ingin mengembalikan lebih dari 1 nilai, gunakan ini:
nilai yang dikembalikan dalam @retIndex dan @retText
sumber
Ini sesuatu yang bisa Anda coba
sumber
Ini sudah lama sekali, jadi tidak yakin apakah ini masih diperlukan, tetapi Anda bisa menggunakan variabel @@ ROWCOUNT untuk melihat berapa banyak baris yang terpengaruh dengan pernyataan sql sebelumnya.
Ini berguna ketika misalnya Anda membangun pernyataan Pembaruan dinamis dan menjalankannya dengan exec. @@ ROWCOUNT akan menunjukkan berapa banyak baris yang diperbarui.
Inilah definisi
sumber
Ini bekerja untuk saya:
sumber