【Transact-SQL】WHILEでのループ処理

ALL
この記事は約3分で読めます。

基本コードシリーズになります。

今回はSQL構文の「WHILE句」を使う方法です。
テーブルで処理するSQLにおいて、基本的にWHILE句を使用する場面は多くありません。
しかしながら、使用頻度が少ない上にCURSORやFETCHといった、これまた使用頻度の少ない構文も組み合わせて使用する必要があるため、
プログラムの基礎であるループでありながら忘れやすい構文でもあります。

やり方.

WHILE構文を使用するには「CURSOR」を使用し、LISTやTABLEの行をフェッチし処理します。

フェッチとは、CPUの動作のうち、メモリから命令コード(インストラクション)を取り出してくる動作のこと。
引用元:ZDNET – フェッチとは

※ここでの意味合いとしては、LISTやTABLEから行を[取り出す]という動作を表します。

DECLARE @EXAMPLE_LIST LIST
DECLARE @COLUMN1 int
DECLARE @COLUMN2 varchar(max)

DECLARE EXAMPLE_CURSOR CURSOR FOR
SELECT
    EXAMPLE_COLUMN_1
    ,EXAMPLE_COLUMN_2

FROM
    @EXAMPLE_LIST

OPEN HOGE_CURSOR
FETCH NEXT FROM HOGE_CURSOR INTO @COLUMN1, @COLUMN2

WHILE @@FETCH_STATUS = 0
BEGIN
    ~ここに処理~
    FETCH NEXT FROM DELETE_CORSOR INTO @COLUMN1, @COLUMN2
END

コード例.

DECLARE @HOGE_LIST LIST –ユーザー定義テーブル
DECLARE @HOGE1 int
DECLARE @HOGE2 varchar(max)

DECLARE HOGE_CURSOR CURSOR FOR
SELECT
    HOGE1
    ,HOGE2

FROM
    @HOGE_LIST

OPEN HOGE_CURSOR
FETCH NEXT FROM HOGE_CURSOR INTO @HOGE1, @HOGE2

WHILE @@FETCH_STATUS = 0
BEGIN
    ~ここに処理~
    FETCH NEXT FROM DELETE_CORSOR INTO @HOGE1, @HOGE2
END