いくつかの方法があります。次の例のように、パラメーターを XML BLOB として渡すことができます:
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>'
または、値を CSV として渡し、分割関数を使用して値をテーブル変数に分割します (多くの分割関数があり、クイック検索で 1 つが表示されます)。
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'
SQL 2008 以降を使用している場合は、TABLE 変数をパラメーターとして渡すことができるテーブル値パラメーターを使用できます。 ブログを書いた しばらく前にこれら 3 つのアプローチについて説明し、パフォーマンスを簡単に比較します。