Din sp_executesql SQL borde förmodligen vara;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Detta gör att du kan anropa sp_executesql med @eStatus som parameter istället för att bädda in den i SQL. Det ger fördelen att @eStatus kan innehålla alla tecken och det kommer att automatiskt escapes korrekt av databasen om det krävs för att vara säkert.
Jämför det med den SQL som krävs för EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...där en char(39) inbäddad i @Status kommer att göra din SQL ogiltig och möjligen skapa en SQL-injektionsmöjlighet. Till exempel, om @Status är satt till O'Reilly
, din resulterande SQL skulle vara;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'