Ihr sp_executesql SQL sollte wahrscheinlich;
seinDECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Dadurch können Sie sp_executesql mit @eStatus als Parameter aufrufen, anstatt es in die SQL einzubetten. Das hat den Vorteil, dass @eStatus beliebige Zeichen enthalten kann und es wird von der Datenbank automatisch korrekt maskiert, wenn dies aus Sicherheitsgründen erforderlich ist.
Vergleichen Sie dies mit dem für EXEC erforderlichen SQL;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
... wo ein in @Status eingebettetes Zeichen (39) Ihr SQL ungültig macht und möglicherweise eine SQL-Injection-Möglichkeit schafft. Zum Beispiel, wenn @Status auf O'Reilly
gesetzt ist , wäre Ihr resultierendes SQL;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'