Pages

2013/08/20

[SQL Server] IN 句にパラメータを指定する (ユーザー定義テーブル型)

IN 句をパラメータで指定させたいという要望はたまにあるが、動的に SQL 文を組み立てるくらいしか対処方法がなかった。しかし、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/
Related Posts Plugin for WordPress, Blogger...