Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Запомнена процедура EXEC срещу sp_executesql разлика?

Вашият sp_executesql SQL вероятно трябва да бъде;

DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
            @TableName + ' where [email protected]'

Това ще ви позволи да извикате sp_executesql с @eStatus като параметър, вместо да го вграждате в SQL. Това ще даде предимството, че @eStatus може да съдържа всякакви знаци и ще бъде правилно изключен автоматично от базата данни, ако се изисква да бъде защитен.

Сравнете това с SQL, необходим за EXEC;

DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
            @TableName + ' where Status=' + char(39) + @Status + char(39)

... където char(39), вграден в @Status, ще направи вашия SQL невалиден и вероятно ще създаде възможност за SQL инжекция. Например, ако @Status е настроен на O'Reilly , полученият ви SQL ще бъде;

select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обединете няколко реда в един ред

  2. Вмъкване на големи обектни данни в Salesforce.com от SQL Server

  3. SWITCHOFFSET() Примери в SQL Server

  4. Как мога да редактирам стойности на INSERT в тригер на SQL Server?

  5. CONVERT() от дата/час към примери за низове в SQL Server