Twój sp_executesql SQL prawdopodobnie powinien być;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Umożliwi to wywołanie sp_executesql z @eStatus jako parametrem zamiast osadzania go w SQL. Da to tę przewagę, że @eStatus może zawierać dowolne znaki i będzie prawidłowo automatycznie eskortowany przez bazę danych, jeśli będzie to wymagane do zapewnienia bezpieczeństwa.
Porównaj to z SQL wymaganym dla EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...gdzie znak(39) osadzony w @Status spowoduje, że Twój SQL będzie nieważny i prawdopodobnie stworzy możliwość wstrzyknięcia SQL. Na przykład, jeśli @Status jest ustawiony na O'Reilly
, wynikowy SQL byłby;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'