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 

到此爲止,我能夠獲取版本的數據並將其存儲在表值參數版本中。但現在我需要遍歷它來執行像如何在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 

一些操作如何指定將只運行至@Versions病情值(增量 - 對於版本1執行一些更新,然後做同樣爲V2,然後退出)

也請建議是否有更好的方法來做到這一點!

+0

你已經採取了看看在SQL服務器遊標?它們是在一個集合上聲明的,並可用於將值提取到一個或多個變量中。只要光標集中有記錄,您就可以設置一個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 
相關問題