Votre sp_executesql SQL devrait probablement être ;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
Cela vous permettra d'appeler sp_executesql avec @eStatus comme paramètre au lieu de l'intégrer dans le SQL. Cela donnera l'avantage que @eStatus peut contenir n'importe quel caractère et il sera correctement échappé automatiquement par la base de données si nécessaire pour être sécurisé.
Comparez cela au SQL requis pour EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
... où un char(39) intégré dans @Status rendra votre SQL invalide et créera éventuellement une possibilité d'injection SQL. Par exemple, si @Status est défini sur O'Reilly
, votre SQL résultant serait ;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'