Declarar a variável para um texto de pesquisa

estava a pensar se havia uma maneira de fazer isto no MS SQL Server 2005:

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

  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
            )
 ... etc
Isto é possível?

Author: Callat, 2010-09-30

4 answers

DECLARE @theDate DATETIME
SET @theDate = '2010-01-01'

Então mude a sua consulta para usar esta lógica:

AND 
(
    tblWO.OrderDate > DATEADD(MILLISECOND, -1, @theDate) 
    AND tblWO.OrderDate < DATEADD(DAY, 1, @theDate)
)
 52
Author: hunter, 2010-09-30 17:54:26

Utilizar EXEC

Pode usar o seguinte exemplo para construir a instrução SQL.

DECLARE @sqlCommand varchar(1000)
DECLARE @columnList varchar(75)
DECLARE @city varchar(75)
SET @columnList = 'CustomerID, ContactName, City'
SET @city = '''London'''
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
EXEC (@sqlCommand)

Usando sp_ ExecuteSQL

Com esta abordagem, pode garantir que os valores dos dados que estão a ser passados para a consulta são os tipos de dados correctos e evitar o uso de mais citações.

DECLARE @sqlCommand nvarchar(1000)
DECLARE @columnList varchar(75)
DECLARE @city varchar(75)
SET @columnList = 'CustomerID, ContactName, City'
SET @city = 'London'
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city

Referência

 2
Author: Somnath Muluk, 2020-06-20 09:12:55

Vou salientar que no artigo ligado na resposta top rated A maldição e as bênçãos do Dinâmico SQL o autor afirma que a resposta não é usar o dinâmico SQL. Role quase até ao fim para ver isto.

A partir do artigo: "o método correcto é desempacotar a lista numa tabela com uma função definida pelo utilizador ou um procedimento armazenado."

Claro, uma vez que a lista está numa tabela, você pode usar uma junção. Não podia comentar directamente a resposta mais notada, por isso ... adicionei este comentário.

 1
Author: DavidG, 2018-01-04 23:11:04