SQLServerでストアドのパラメータにin句を渡したいときがあります。
単純には出来ないので以下のようにします。
テーブル値関数で次の関数を作成します。
区切り文字で区切るスプリット関数です。
※SQLServer2016からSTRING_SPLITという関数が実装されましたので2016以降はそれを使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
CREATE FUNCTION [dbo].[Split] ( @String VARCHAR(8000), @Delimiter CHAR(1) ) RETURNS @temptable TABLE (items VARCHAR(8000)) AS BEGIN DECLARE @idx INT DECLARE @slice VARCHAR(8000) SELECT @idx = 1 IF LEN(@String) < 1 OR @String IS NULL BEGIN RETURN END WHILE @idx != 0 BEGIN SET @idx = CHARINDEX(@Delimiter, @String) IF @idx != 0 BEGIN SET @slice = LEFT(@String, @idx - 1) END ELSE BEGIN SET @slice = @String END IF LEN(@slice) > 0 BEGIN INSERT INTO @temptable(Items) VALUES(@slice) END SET @String = RIGHT(@String, LEN(@String) - @idx) IF LEN(@String) = 0 BEGIN BREAK END END RETURN END |
あとはこの関数を使ってin句を作成するだけです。
1 2 3 4 5 6 7 8 |
SET @Param = 'a,b,c,d,e,f,g' SELECT * FROM table WHERE value IN (SELECT items FROM dbo.Split(@Param, ',')) |
スポンサーサイト
アフィリエイトはエーハチネット

ドメイン取るならお名前.com
