Вашият sp_executesql SQL вероятно трябва да бъде;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Това ще ви позволи да извикате sp_executesql с @eStatus като параметър, вместо да го вграждате в SQL. Това ще даде предимството, че @eStatus може да съдържа всякакви знаци и ще бъде правилно изключен автоматично от базата данни, ако се изисква да бъде защитен.
Сравнете това с SQL, необходим за EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
... където char(39), вграден в @Status, ще направи вашия SQL невалиден и вероятно ще създаде възможност за SQL инжекция. Например, ако @Status е настроен на O'Reilly
, полученият ви SQL ще бъде;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'