1
DECLARE @Versions table (id int); 

INSERT INTO @Versions 
    SELECT DISTINCT Version_Id 
    FROM dbo.values 
    WHERE CatId = (SELECT id FROM dbo.Category WHERE Name = 'Locations') 

SELECT * FROM @Versions --- returns 1,2 

ここまでで、バージョンのデータをフェッチして、テーブル値のパラメータバージョンに格納することができました。バージョン1は、その後、v2のために同じことを行う、その後、いくつかのアップデートを実行するために - しかし、今、私は@Versions値(インクリメンタルを持っているまでにのみ実行されます条件を指定する方法SQL Serverに値の配列を格納してそれを反復する方法

WHILE(till @Versions has value) -- Iterate till @Versions exhausts its value ,which will be ideally 1,2 then stop iteration 
    BEGIN 
     -- Update Statements for each version 
    END 

のようないくつかの操作を実行するために、それを反復処理する必要がありますexit)

また、これを行うには、より良い方法があるかどうかをお教えください。

+0

を使用することができますが、SQLサーバー内のカーソルを見て撮影したことがありますか?それらはセットで宣言され、1つ以上の変数に値をフェッチするために使用できます。カーソルセットにレコードが残っている限り実行されるwhileループを設定できます。カーソルなしで解決したい場合は、何をしようとしているかによって決まります。実行される動的SQLを定義するためにカーソルを使用しない限り、通常は可能です。 –

答えて

1

あなたは以下のようにROW_NUMBERを使用することができます。

;WITH CTE 
AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RowId FROM @Versions 
) 

DECLARE @Counter INT 
SELECT @Counter = COUNT(*) FROM CTE 

WHILE(@Counter != 0) -- Iterate till @Versions exhausts its value ,which will be ideally 1,2 then stop iteration 
    BEGIN 

    -- Current Version 
    SELECT * FROM CTE 
    WHERE RowId = @Counter 

    -- Update Statements for each version 

    SET @Counter -= 1 

    END 

それともEXISTS

WHILE(EXISTS(SELECT 1 FROM @Versions)) -- Iterate till @Versions exhausts its value ,which will be ideally 1,2 then stop iteration 
BEGIN 
    -- Update Statements for each version 

    -- After update operation 
    DELETE FROM @Versions 
    WHERE Id = @CurrentVersionId 
END 
関連する問題