SQL Server のT-SQLはセットベースのクエリで高いパフォーマンスを発揮するように作られています。しかし、カーソルのほうが処理が高速化する場合もあります。本気時では、簡単なカーソル定義と使用方法のテンプレートを記載します。細かい処理についてはBooks Onlineを参照してください。

T-SQL は SQL Server 2005 Developer Edition で確認しています。

1. 基本的なカーソル使用方法のテンプレート

カーソルは次の手順で使用します。

  1. カーソル定義
    DECLARE カーソル名 CURSOR
  2. カーソルをオープン
    OPEN カーソル名
  3. レコードFETCH
    FETCH
  4. カーソルのクローズ
    CLOSE カーソル名
  5. カーソル開放
    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 を参照願います。

説明は以上です。誤り等がありましたらご指摘ください。