コンマ区切りのリストとして渡し、分割関数を使用して、結果に対して結合することができます。
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
SELECT Item = CONVERT(INT, Item)
FROM
(
SELECT Item = x.i.value('(./text())[1]', 'INT')
FROM
(
SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a
CROSS APPLY
[XML].nodes('i') AS x(i)
) AS y
WHERE Item IS NOT NULL
);
ストアド プロシージャ:
CREATE PROCEDURE dbo.doStuff
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT cols FROM dbo.table AS t
INNER JOIN dbo.SplitInts(@List, ',') AS list
ON t.ID = list.Item;
END
GO
それを呼び出すには:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
背景、その他のオプション、およびパフォーマンスの比較については、こちらをご覧ください:
- 文字列を正しい方法で、または次善の方法で分割する方法
- 文字列の分割:フォローアップ
- 文字列の分割:T-SQL が少なくなりました
- 文字列分割/連結方法の比較
- 整数のリストの処理:私のアプローチ
- 整数のリストを分割する:別のまとめ
- リストの分割の詳細:カスタム区切り文字、重複の防止、順序の維持
- 削除中SQL Server の文字列からの重複
ただし、SQL Server 2016 以降では、STRING_SPLIT()
および STRING_AGG() コード>
:
- パフォーマンスの驚きと仮定:STRING_SPLIT()
- SQL Server の STRING_SPLIT() 2016 :フォローアップ #1
- SQL Server の STRING_SPLIT() 2016 :フォローアップ #2
- SQL Server v.Next :STRING_AGG() パフォーマンス
- SQL Server の新しい STRING_AGG および STRING_SPLIT 関数で古い問題を解決