sql >> Databáze >  >> RDS >> Sqlserver

Rozdíl uložené procedury EXEC vs sp_executesql?

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'


  1. Jak vrátit pozici argumentu v seznamu argumentů v MySQL

  2. 6 způsobů, jak zkontrolovat, zda existuje tabulka na serveru SQL (příklady T-SQL)

  3. Vytvořte novou databázi pomocí MySQL Workbench

  4. Nový způsob, jak si přizpůsobit sledování PostgreSQL pomocí Prometheus