SQL Server ストアドプロシージャー内でのループ (テーブル変数利用)
CREATE PROCEDURE [dbo].[stHoge]
AS
Declare
@i int
, @Count int
, @r1 int
, @r2 int
–テーブル変数を定義
Declare
@T1 table(
ID int identity(1,1) –ループ用に1から順番に番号を付ける
, a1 int
, a2 int
);
BEGIN
SET NOCOUNT ON;
–リストをテーブル変数に代入
INSERT INTO @T1 (a1, a2)
SELECT a1, a2 FROM Hoge1
–ループ設定
SELECT @Count = Count(*) FROM @T1
Set @i = 1
–ループ
WHILE @i <= @Count
BEGIN
SELECT @r1 = a1, @r2 = a2 FROM @T1 WHERE ID = @i
UPDATE Hoge2 SET c1 = @r1 WHERE c2 = @r2
Set @i = @i + 1
END
END
参考:カーソルを使う方法 (2014.07.04追記)
Declare
@r1 int
, @r2 int
–カーソルの宣言
Declare Cur1 CURSOR FOR
SELECT a1, a2 FROM Hoge1
–カーソルを開く
OPEN Cur1
–ループ
FETCH NEXT FROM Cur1 INTO @r1, @r2
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Hoge2 SET c1 = @r1 WHERE c2 = @r2
FETCH NEXT FROM Cur1 INTO @r1, @r2
END
–カーソルを閉じ、開放
CLOSE Cur1
DEALLOCATE Cur1

