[SQL Server] IN 句にパラメータを指定する (ユーザー定義テーブル型)
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/