Apa pro dan kontra dunia nyata dari menjalankan perintah SQL dinamis dalam prosedur tersimpan di SQL Server menggunakan
EXEC (@SQL)
melawan
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Mesin Ash
sumber
sumber
Artikel Microsoft's Using sp_executesql merekomendasikan penggunaan
sp_executesql
alih-alihexecute
pernyataan.Jadi, take away: Jangan gunakan
execute
pernyataan . Gunakansp_executesql
.sumber
sp_executesql
tidak dapat digunakan untuk menggantikanexecute
. Mungkin saya harus menempatkan poin yang saya coba tekankan sebagai: Gunakansp_executesql
alih-alihexecute
bila memungkinkan .Saya akan selalu menggunakan sp_executesql hari ini, semua itu sebenarnya adalah pembungkus untuk EXEC yang menangani parameter & variabel.
Namun jangan lupa tentang OPSI RECOMPILE saat menyelaraskan kueri pada database yang sangat besar, terutama jika Anda memiliki data yang tersebar di lebih dari satu database dan menggunakan CONSTRAINT untuk membatasi pemindaian indeks.
Kecuali Anda menggunakan OPTION RECOMPILE, SQL server akan mencoba membuat rencana eksekusi "satu ukuran cocok untuk semua" untuk kueri Anda, dan akan menjalankan pemindaian indeks penuh setiap kali dijalankan.
Ini jauh lebih tidak efisien daripada seek, dan artinya ini berpotensi memindai seluruh indeks yang dibatasi ke rentang yang bahkan tidak Anda tanyakan: @
sumber
jalankan perintahnya
sumber
int
dalam SQL dinamis. Perhatikan bahwa @sql dideklarasikan sebagaivarchar
ataunvarchar