sql >> Databasteknik >  >> RDS >> Sqlserver

Skillnaden mellan lagrad procedur EXEC vs sp_executesql?

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'


  1. 4 sätt att få databassamlingen i MariaDB

  2. Hur man använder ALL Logical Operator i SQL Server - SQL Server / TSQL Tutorial Del 126

  3. Olika CURRENT_TIMESTAMP och SYSDATE i oracle

  4. Konvertera 'datetime' till 'smalldatetime' i SQL Server (T-SQL-exempel)