SQL Server のT-SQLはセットベースのクエリで高いパフォーマンスを発揮するように作られています。しかし、カーソルのほうが処理が高速化する場合もあります。本気時では、簡単なカーソル定義と使用方法のテンプレートを記載します。細かい処理についてはBooks Onlineを参照してください。
T-SQL は SQL Server 2005 Developer Edition で確認しています。
1. 基本的なカーソル使用方法のテンプレート
カーソルは次の手順で使用します。
- カーソル定義
DECLARE カーソル名 CURSOR - カーソルをオープン
OPEN カーソル名 - レコードFETCH
FETCH - カーソルのクローズ
CLOSE カーソル名 - カーソル開放
DEALLOCATE カーソル名
sys.database_principalsビューのレコードをフェッチするサンプルを掲載します。
DECLARE @name nvarchar(255)
DECLARE @type_desc nvarchar(max)
-- 1. カーソル定義
DECLARE articlesCursor CURSOR
FORWARD_ONLY READ_ONLY
FOR SELECT TOP 5 name, type_desc
FROM sys.database_principals
-- 2. カーソルオープン
OPEN articlesCursor
-- 3. レコードFETCH
FETCH NEXT FROM articlesCursor
INTO @name, @type_desc
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @name + ':' + SUBSTRING(@type_desc,0,10)
FETCH NEXT FROM articlesCursor
INTO @name, @type_desc
END
-- 4. カーソルクローズ
CLOSE articlesCursor
-- 5. カーソル開放
DEALLOCATE articlesCursor
カーソル定義にはさまざまなオプションが指定できます。更新する場合は、FOR UPDATE,フォアワードフェッチ以外のカーソル処理をする場合は、えSCROLLを指定するなどオプションがあります。FETCH文もNEXTだけでなく、 PRIOR, FIRST, LAST, ABSOLUTE, RELATIVEなどを指定できます。
詳細はBOOKS ONLINE を参照願います。
説明は以上です。誤り等がありましたらご指摘ください。