FM牛鍵屋本舗

プログラマ(弱)の日々精進系ブログ

【T-SQL】CURSORの使い方

触ってないとすぐ忘れちゃう…。
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/fetch-status-transact-sql
とはいえマニュアルじっくり読んでないから、 ちゃんと読みたい。

CREATE CUROR cursor_name FOR
  SELECT id, name FROM sample_table
;

DECLARE @c_id INT;
DECLARE @c_name NVARCHAR(10);
OPEN cursor_name;
FETCH NEXT FROM cursor_name  INTO
  @c_id, @c_name
;

DECLARE @tmpTable (
  t_id INT,
  t_name NVARCHAR(10)
)

-- @@FETCH_STATUSは
-- -1 : FETCH文失敗か結果セットに収まらない
-- -2 : 取り出した行がない
WHILE @@FETCH_STATUS = 0
 BEGIN
 
 INSERT INTO
 @tmpTable
 VALUES (
   @c_id,
   @c_name
 );

 -- 次を読み込む
 FETCH NEXT FROM cursor_name  INTO
   @c_id, @c_name
 ;

 END

CLOSE cursor_name;
-- @@FETCH_STATUSは初期化されないから注意

あと完全に別件だし、MSDNでも前者だけど、

IF boolean
  BEGIN
    statement
  END

ではなくて

IF boolean
  BEGIN
  statement
  END

モアベターだとか。 CodeCompleteによれば、だけど。

ほなまた!