Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khai báo biến cho một chuỗi truy vấn

Có thể, nhưng nó yêu cầu sử dụng SQL động.
Tôi khuyên bạn nên đọc Lời nguyền và phước lành của động SQL trước khi tiếp tục ...

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 động chỉ là một câu lệnh SQL, được tạo thành một chuỗi trước khi được thực thi. Vì vậy, nối chuỗi thông thường xảy ra. SQL động là bắt buộc bất cứ khi nào bạn muốn làm điều gì đó trong cú pháp SQL không được phép, như:

  • một tham số duy nhất để biểu thị danh sách giá trị được phân tách bằng dấu phẩy cho mệnh đề IN
  • một biến đại diện cho cả giá trị và cú pháp SQL (IE:ví dụ bạn đã cung cấp)

EXEC sp_executesql cho phép bạn sử dụng các tham số ràng buộc / chuẩn bị sẵn sàng để bạn không phải lo lắng về việc thoát các dấu ngoặc kép / v.v ... đối với các cuộc tấn công chèn 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. Kết nối Genero với SQL Server

  2. Thay đổi CTE SELECT thành hàm do người dùng xác định giá trị bảng

  3. 3 cách lấy danh sách cơ sở dữ liệu trong SQL Server (T-SQL)

  4. Tìm hiểu dịch vụ máy chủ sql đã hoạt động trong bao lâu, từ t-sql

  5. Kết nối với máy chủ SQL hoạt động đôi khi