Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Declare variável para uma string de consulta


É possível, mas requer o uso de SQL dinâmico.
Recomendo a leitura de A maldição e as bênçãos da dinâmica SQL antes de continuar...
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 dinâmico é apenas uma instrução SQL, composta como uma string antes de ser executada. Assim, ocorre a concatenação de strings usual. O SQL dinâmico é necessário sempre que você deseja fazer algo na sintaxe SQL que não é permitido, como:
  • um único parâmetro para representar a lista de valores separados por vírgulas para uma cláusula IN
  • uma variável para representar valor e sintaxe SQL (IE:o exemplo que você forneceu)

EXEC sp_executesql permite que você use parâmetros bind/preparedstatement para que você não precise se preocupar em escapar de aspas simples/etc para ataques de injeção de SQL.