コンマ区切りの値をストアド プロシージャに渡すことができます。
ストアド プロシージャでこのコンマ区切りリストを処理する方法は 2 つあります。
動的SQLを使用してIn演算子を使用する比較的簡単な方法
別の方法は、文字列をテーブルに分割して in 句で使用することです
これは2番目のタイプの例です
テーブル型を返す関数を作成しています
CREATE Function [dbo].[Splitter] (@CommaSperatedString varchar(max))
戻り値 @Tbl_Values テーブル (indValues varchar(500)) As
Begin IF(@CommaSperatedString != '') Begin Set @CommaSperatedString = @CommaSperatedString + ',' -- 検索位置を保持するインデックス Declare @Pos1 Int Declare @pos2 Int
-- Start from first character
Set @Pos1=1
Set @Pos2=1
While @Pos1<Len(@CommaSperatedString)
Begin
Set @Pos1 = CharIndex(',',@CommaSperatedString,@Pos1)
Insert @Tbl_Values Select Cast(Substring(@CommaSperatedString,@Pos2,@Pos1-@Pos2) As varchar(500))
-- Go to next non comma character
Set @Pos2=@Pos1+1
-- Search from the next charcater
Set @Pos1 = @Pos1+1
End
End
Else Begin @Tbl_Values 値を挿入 (1)
End Return End
そして、これを次のように手順で使用します
select * from Table where values in (select * from Splitter(@CommaList))
これで問題は解決します。