トップページ > SqlServer ストアドプロシージャ > カーソルを定義
カーソルを定義には、「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だと使用するメモリ遼を設定で変更することができます。
可変にするとスピードが驚くほど早くなります。
ただ、メモリの開放がされなくなる問題点があったと思います。