Il tuo sp_executesql Probabilmente dovrebbe esserlo SQL;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Ciò ti consentirà di chiamare sp_executesql con @eStatus come parametro invece di incorporarlo nell'SQL. Ciò darà il vantaggio che @eStatus può contenere qualsiasi carattere e verrà eseguito correttamente l'escape automaticamente dal database se necessario per essere sicuro.
Confrontalo con l'SQL richiesto per EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...dove un char(39) incorporato in @Status renderà il tuo SQL non valido e probabilmente creerà una possibilità di iniezione SQL. Ad esempio, se @Status è impostato su O'Reilly
, il tuo SQL risultante sarebbe;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'