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

Truyền nhiều giá trị cho một tham số SQL

Có một số cách để thực hiện, bạn có thể truyền tham số dưới dạng một blob XML như ví dụ sau:

CREATE PROCEDURE [dbo].[uspGetCustomersXML]
    @CustomerIDs XML
AS
BEGIN
SELECT c.ID, c.Name
FROM [dbo].[Customer] c
JOIN @CustomerIDs.nodes('IDList/ID') AS x(Item) ON c.ID = Item.value('.', 'int' )
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersXML] '<IDList><ID>1</ID><ID>10</ID><ID>100</ID></IDList>'

Hoặc chuyển các giá trị dưới dạng CSV và sử dụng hàm phân tách để tách các giá trị thành một biến bảng (có rất nhiều hàm phân tách ở đó, tìm kiếm nhanh sẽ đưa ra một biến).

CREATE PROCEDURE [dbo].[uspGetCustomersCSV]
    @CustomerIDs VARCHAR(8000)
AS
BEGIN
SELECT c.Id, c.Name
FROM [dbo].[Customer] c
JOIN dbo.fnSplit(@CustomerIDs, ',') t ON c.Id = t.item
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersCSV] '1,10,100'

Nếu bạn đang sử dụng SQL 2008 trở lên, bạn có thể đã sử dụng Tham số có giá trị bảng cho phép bạn chuyển biến TABLE vào dưới dạng tham số. Tôi đã viết blog về 3 cách tiếp cận này một thời gian trước, với một so sánh nhanh về hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề với so sánh SQL và giá trị null

  2. Nhận lược đồ cột bảng SQL với Kiểu dữ liệu và Độ dài tối đa trong giá trị số

  3. Không hiểu hành vi làm tròn trong máy chủ sql khi sử dụng toán tử phân chia

  4. Làm thế nào để tạo một thủ tục được lưu trữ với schemabinding?

  5. Thời gian thu thập cảnh báo đám mây tiêu điểm