Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Deklarieren Sie eine Variable für eine Abfragezeichenfolge

Es ist möglich, aber es erfordert die Verwendung von dynamischem SQL.
Ich empfehle, Fluch und Segen der Dynamik zu lesen SQL bevor Sie fortfahren...

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)

Dynamisches SQL ist nur eine SQL-Anweisung, die vor der Ausführung als Zeichenfolge zusammengesetzt wird. Es findet also die übliche Zeichenfolgenverkettung statt. Dynamisches SQL ist immer dann erforderlich, wenn Sie etwas in der SQL-Syntax tun möchten, das nicht erlaubt ist, wie zum Beispiel:

  • ein einzelner Parameter zur Darstellung einer durch Kommas getrennten Liste von Werten für eine IN-Klausel
  • eine Variable, die sowohl den Wert als auch die SQL-Syntax darstellt (IE:das von Ihnen bereitgestellte Beispiel)

EXEC sp_executesql ermöglicht Ihnen die Verwendung von bind/preparedstatement-Parametern, sodass Sie sich nicht darum kümmern müssen, einfache Anführungszeichen/etc für SQL-Injection-Angriffe zu maskieren.