Váš sp_executesql SQL by pravděpodobně mělo být;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where [email protected]'
To vám umožní volat sp_executesql s parametrem @eStatus namísto jeho vkládání do SQL. To poskytne výhodu, že @eStatus může obsahovat libovolné znaky a bude-li to vyžadováno pro zabezpečení, databáze bude automaticky správně escapována.
Porovnejte to s SQL požadovaným pro EXEC;
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' +
@TableName + ' where Status=' + char(39) + @Status + char(39)
...kde znak (39) vložený do @Status způsobí, že váš SQL bude neplatný a možná vytvoří možnost vložení SQL. Například pokud je @Status nastaven na O'Reilly
, vaše výsledné SQL by bylo;
select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'