sp_executesql Your Anda SQL mungkin seharusnya;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Ini akan memungkinkan Anda untuk memanggil sp_executesql dengan @eStatus sebagai parameter alih-alih menyematkannya ke dalam SQL. Itu akan memberikan keuntungan bahwa @eStatus dapat berisi karakter apa pun dan itu akan diloloskan dengan benar secara otomatis oleh database jika diperlukan agar aman.
Bandingkan dengan SQL yang diperlukan untuk EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...di mana char(39) yang disematkan di @Status akan membuat SQL Anda tidak valid dan mungkin membuat kemungkinan injeksi SQL. Misalnya, jika @Status diatur ke O'Reilly
, SQL yang Anda hasilkan adalah;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'