いくつかの方法があります。 あなたはこの例のようにXMLブロブなどのパラメータに渡すことができます。
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変数をパラメータとして渡すことができます。私はbloggedこれらの3つのアプローチについては、戻って、迅速なパフォーマンスの比較で。
http://stackoverflow.com/questions/878833/passing-a-varchar-full-of-comma-delimited-values-to-a-sql-server-in-function(またはビットマスクを使用) –