SQL Server ストアドでのループ

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