Me preguntaba si había una forma de hacer esto en 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
¿Es posible hacerlo?
                    
                        sql
                                sql-server
                                sql-server-2005
                                tsql
                                dynamic-sql
                                
                    
                    
                        StealthRT
fuente
                
                fuente

Respuestas:
Es posible, pero requiere el uso de SQL dinámico.
Recomiendo leer La maldición y las bendiciones del SQL dinámico antes de continuar ...
El SQL dinámico es solo una declaración de SQL, compuesta como una cadena antes de ejecutarse. Entonces ocurre la concatenación de cadenas habitual. Se requiere SQL dinámico siempre que desee hacer algo en la sintaxis SQL que no está permitido, como:
EXEC sp_executesqlle permite usar parámetros de vinculación / declaración preparada para que no tenga que preocuparse por escapar de comillas simples / etc. para ataques de inyección SQL.fuente
Luego cambie su consulta para usar esta lógica:
fuente
Usando EXEC
Puede utilizar el siguiente ejemplo para crear una declaración SQL.
Usando sp_executesql
Con este enfoque, puede asegurarse de que los valores de datos que se pasan a la consulta sean los tipos de datos correctos y evitar el uso de más comillas.
Referencia
fuente
Señalaré que en el artículo vinculado en la respuesta mejor calificada The Curse and Blessings of Dynamic SQL, el autor afirma que la respuesta es no usar SQL dinámico. Desplácese casi hasta el final para ver esto.
Del artículo: "El método correcto es descomprimir la lista en una tabla con una función definida por el usuario o un procedimiento almacenado".
Por supuesto, una vez que la lista está en una tabla, puede usar una combinación. No pude comentar directamente sobre la respuesta mejor calificada, así que acabo de agregar este comentario.
fuente