Din sp_executesql SQL burde nok være;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Dette vil tillade dig at kalde sp_executesql med @eStatus som en parameter i stedet for at indlejre det i SQL. Det vil give den fordel, at @eStatus kan indeholde alle tegn og den vil automatisk blive korrekt escaped af databasen, hvis det kræves for at være sikkert.
Sammenlign det med den SQL, der kræves til EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...hvor et char(39) indlejret i @Status vil gøre din SQL ugyldig og muligvis skabe en SQL-injektionsmulighed. For eksempel, hvis @Status er sat til O'Reilly
, ville din resulterende SQL være;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'