Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zadeklaruj zmienną dla ciągu zapytania

Jest to możliwe, ale wymaga użycia dynamicznego SQL.
Polecam przeczytanie Klątwa i błogosławieństwo dynamiki SQL przed kontynuowaniem...

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)

Dynamiczny SQL to po prostu instrukcja SQL, złożona jako ciąg przed wykonaniem. Tak więc następuje zwykła konkatenacja ciągów. Dynamiczny SQL jest wymagany, gdy chcesz zrobić coś w składni SQL, co jest niedozwolone, na przykład:

  • pojedynczy parametr reprezentujący listę wartości oddzielonych przecinkami dla klauzuli IN
  • zmienna reprezentująca zarówno wartość, jak i składnię SQL (IE:podany przez Ciebie przykład)

EXEC sp_executesql pozwala na użycie parametrów wiązania/preparedstatement, dzięki czemu nie musisz się martwić o unikanie pojedynczych cudzysłowów/itd. w przypadku ataków wstrzykiwania 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. Jak debugować komponent skryptu w SSIS

  2. Jak stworzyć DB w SQL Express za pomocą poleceń SQL?

  3. Tabela SQL i ekstrakcja danych

  4. Jak skonfigurować proste pole obliczeniowe w SQL Server?

  5. Jakie są idealne narzędzia do analizy skryptów sql?