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.