3つのデータをテストします
CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id) );
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');
INSERT INTO test_main (id, value) VALUES (3, 'THREE');
簡単なループ処理
DECLARE
@id INT, @value VARCHAR(10);
BEGIN
-- カーソルを定義します。
DECLARE c_test_main CU RSOR FAST_FORWARD FOR
SELECT id, value FROM test_main;
-- カーソルを開きます。
OPEN c_test_main;
-- データを入力します。
FETCH NEXT FROM c_test_main INTO @id, @value;
- -取得されたデータが処理された場合。
WHILE @@fetch_status = 0
BEGIN
PRINT @value;
--次のデータを入力します。
FETCH NEXT FROM c_test_main INTO @id, @value;
END ;
-- カーソルを閉じます
CLOSE c_test_main;
-- カーソルを放します。
DEALLOCATE c_test_main;
END;
go
ONE
TWO
THREE
Cur最新情報をお知らせします
宣言する
@ id INT, @value VARCHAR(10);
BEGIN
-- カーソルを定義します。
DECLARE c_test_main CURSOR FOR
SELECT id, value FROM test_main
FOR UPDATE;
-- カーソルを開きます.
OPEN c_test_main ;
-- データを入力します。
FETCH NEXT FROM c_test_main INTO @id, @value;
-- データが取得された場合のみ処理されます。
WHILE @@fetch_status = 0
BEGIN
PRINT @value;
UPDATE
test_main
Value = value + '1'
OF c_test_main;
--次のデータを入力します。
FETCH NEXT FROM c_test_main INTO @id, @value;
END;
-- カーソルを閉じる
CLOSE c_test_main;
-CURSORをリリースします。
3 Three1 (影響を受ける 3 行)カーソルの前後のローリングをサポートします
注: ここでのテストでは、test_main テーブルのデータが 11 に増加します。
DECLARE
@id INT, @value VARCHAR(10);BEGIN
-- カーソルを定義します。DECLARE c_test_main CURSOR SCROLL FOR
SELECT id, value FROM test_main; -- カーソルを開きます。OPEN c_test_main ;
-- データを入力します。
FETCH FIRST FROM c_test_main INTO @id, @value;PRINT 'カーソルの最初の行:' + @value;
-- データを入力します。
FETCH LAST FROM c_test_main INTO @id, @value ;PRINT 'カーソルの最後の行:' + @value;
-- データを入力します。
FETCH ABSOLUTE 3 FROM c_test_main INTO @id, @value;
-- データを入力します。
PRINT 'カーソル [相対アドレス] の -2 行目:' + @value;
-- データを入力します。
FETCH PRIOR FROM c_test_main INTO @id, @value;
FETCH NEXT FROM c_test_main INTO @id, @value;
PRINT ' カーソルの次の行: ' + @value;
-- カーソルを閉じます
CLOSE c_test_main;
-- カーソルを放します。
DEALLOCATE c_test_main;
END;
DECLARE カーソル名 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { 読み取り専用 | UPDATE [ OF column_name [ ,...n ] ] } ]
Transact-SQL扩展语法
DECLARE カーソル名 CURSOR
[ LOCAL |グローバル ]
[ 転送のみ |スクロール ]
[ 静的 |キーセット |ダイナミック |早送り ]
[ 読み取り専用 |スクロールロック |楽観的 ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]