[SQLServer]カーソル サンプル
PostgreSQLに引き続き、あまりにもよく使用するので、テンプレート化してみた。
比較してみると、カーソル処理に関してはPostgreSQLのほうが楽チンかも。
--#-------------------------------------------------------------------
--# 使用変数の定義
--#-------------------------------------------------------------------
DECLARE
--# カーソル変数
@CursorTargetData CURSOR
--# 以下、フェッチした内容を格納する為の変数
, @wCurColumn1 int -- カーソルの1番目の列
, @wCurColumn2 int -- カーソルの2番目の列
;
--#-------------------------------------------------------------------
--# カーソル定義を行い、メモリに読み込む
--#-------------------------------------------------------------------
SET @CursorTargetData = CURSOR FOR
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
--# 以下に、読み込み対象となるSELECT文を定義(ORDER BY句は必須)
--# <Todo>
SELECT
TableA.Column1
, TableA.Column2
FROM
TableA
ORDER BY
TableA.Column1
--# </Todo>
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
;
--#-------------------------------------------------------------------
--# カーソルオープン
--#-------------------------------------------------------------------
OPEN @CursorTargetData;
--#-------------------------------------------------------------------
--# 現在のカーソルをフェッチ
--#-------------------------------------------------------------------
FETCH NEXT FROM @CursorTargetData INTO
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
--# 以下に、フェッチしたカーソルデータを格納する変数を順序に合わせて定義
--# <Todo>
@wCurColumn1
, @wCurColumn2
--# </Todo>
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
;
--#-------------------------------------------------------------------
--# 以下、カーソルフェッチループ
--#-------------------------------------------------------------------
WHILE (@@FETCH_STATUS = 0)
BEGIN
--#-------------------------------------------------------------------
--# 次のカーソルへ移動
--#-------------------------------------------------------------------
FETCH NEXT FROM @CursorTargetData INTO
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
--# 以下に、フェッチしたカーソルデータを格納する変数を順序に合わせて定義
--# <Todo>
@wCurColumn1
, @wCurColumn2
--# </Todo>
--#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
;
END;
--#-------------------------------------------------------------------
--# カーソルクローズ
--#-------------------------------------------------------------------
CLOSE @CursorTargetData;
--#-------------------------------------------------------------------
--# カーソルをメモリより解放
--#-------------------------------------------------------------------
DEALLOCATE @CursorTargetData;