トップページ > SqlServer ストアドプロシージャ >  カーソルを定義

カーソルを定義

ストアドプロシージャ内で使用できるカーソルとは!?

カーソルを使用するとSELECTの結果に対して1行ごとに繰り返し処理を行えるようになります。

カーソルを定義するには!?

カーソルを定義には、「DECLARE CURSOR」を使用します。

○ サンプルSQL文
-- カーソルを定義する
DECLARE cursorName CURSOR FOR SELECT * FROM tableName

○ 説明
「DECLARE カーソル名 CURSOR FOR SELECT * FROM テーブル名」となります。
カーソルには、SELECTの結果が格納されます。
※ カーソルの定義の場合は、先頭に@を付けません。

カーソルからデータを取得するには!?

カーソルからデータを取得するには、「FETCH」を使用します。

○ サンプルSQL文
-- 変数・カーソル定義
DECLARE cursorName CURSOR FOR SELECT nInt FROM tableName
DECLARE @nInt int

-- カーソルオープン
OPEN cursorName

-- @nIntにデータを格納
FETCH NEXT FROM cursorName
INTO @nInt

-- カーソルのデータが終わるまで繰り返す
WHILE @@FETCH_STATUS = 0
BEGIN

 -- 繰り返し処理

 -- @nIntにデータを格納
 FETCH NEXT FROM cursorName
 INTO @nInt
END
-- カーソル終了処理
CLOSE cursorName
DEALLOCATE cursorName

○ 説明
カーソルのデータ数だけ繰り返し処理を行います。
「@@FETCH_STATUS」の値が0以外になるとデータが終わりとなります。

カーソル使用しすぎでメモリ量が・・・

カーソルを多く使用すると
メモリがどんどん増えていきます。

100万件のデータを扱う際は、
気をつけてくださいね。

「SELECT INSET」などを使用すると、
カーソルを使わなくても出来る場合があります。

メモリに困ってしまったら、行ってみましょう。

また、SQL Serverだと使用するメモリ遼を設定で変更することができます。
可変にするとスピードが驚くほど早くなります。

ただ、メモリの開放がされなくなる問題点があったと思います。

前のページ 変数の定義  | トップページ |  次のページ 繰り返し処理