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

Деклариране на променлива за низ на заявка

Възможно е, но изисква използването на динамичен SQL.
Препоръчвам да прочетете Проклятието и благословията на динамичния SQL преди да продължите...

DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

DECLARE @SQL VARCHAR(MAX)  
SET @SQL = 'SELECT AdministratorCode, 
                   SUM(Total) as theTotal, 
                   SUM(WOD.Quantity) as theQty, 
                   AVG(Total) as avgTotal, 
                  (SELECT SUM(tblWOD.Amount)
                     FROM tblWOD
                     JOIN tblWO on tblWOD.OrderID = tblWO.ID
                    WHERE tblWO.Approved = ''1''
                      AND tblWO.AdministratorCode = tblWO.AdministratorCode
                      AND tblWO.OrderDate BETWEEN '+ @theDate +')'

EXEC(@SQL)

Динамичният SQL е просто SQL оператор, съставен като низ, преди да бъде изпълнен. Така се получава обичайното конкатениране на низове. Динамичният SQL се изисква винаги, когато искате да направите нещо в SQL синтаксиса, което не е разрешено, като:

  • единичен параметър за представяне на разделен със запетаи списък със стойности за IN клауза
  • променлива за представяне както на стойност, така и на SQL синтаксис (IE:примерът, който предоставихте)

EXEC sp_executesql ви позволява да използвате параметри bind/preparedstatement, така че да не се налага да се притеснявате от избягване на единични кавички/и т.н. за атаки с SQL инжектиране.



  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. помощ за задействане на sql сървър - актуализация на същата таблица

  3. Мога ли да оптимизирам заявка SELECT DISTINCT x FROM hugeTable, като създам индекс на колона x?

  4. Защо (и как) да разделяте колона с помощта на master..spt_values?

  5. Създайте график на агент на SQL Server с T-SQL