IN 句をパラメータで指定させたいという要望はたまにあるが、動的に SQL 文を組み立てるくらいしか対処方法がなかった。しかし、SQL Server 2008 から追加された ユーザー定義テーブル型 によって似たような動きをさせることができる。
How to split a string according to a delimiter in Ms SQL Server 2008
http://howucando.com/2013/03/21/how-to-split-a-string-according-to-a-delimiter-in-ms-sql-server-2008/
CREATE TABLE #HOGE
(
USER_NO INT PRIMARY KEY IDENTITY
,NAME VARCHAR(40)
)
INSERT INTO
#HOGE (NAME)
VALUES
('John')
,('David')
,('Jeffrey')
,('Sarrah')
,('Mary')
IF TYPE_ID(N'USERLIST') IS NULL
CREATE TYPE USERLIST AS TABLE
(
NUM INT
)
GO
-- 削除する場合は以下のように記述。
-- DROP TYPE USERLIST
DECLARE @val AS USERLIST
INSERT INTO
@val (NUM)
VALUES
(1)
,(3)

SELECT * FROM #HOGE -- USER_NO フィールドが 1 or 3 のデータを抽出する。 SELECT * FROM #HOGE WHERE USER_NO IN (SELECT NUM FROM @val)ただ、上記のような要望がある場合は、カンマ区切りの文字列を展開したいという場合が多いだろう。カンマ区切りのデータを展開したいのなら、以下のような関数を定義するといい。
How to split a string according to a delimiter in Ms SQL Server 2008
http://howucando.com/2013/03/21/how-to-split-a-string-according-to-a-delimiter-in-ms-sql-server-2008/