Comment stocker tableau de valeurs dans SQL Server et itérer dessus

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 

Jusqu'à présent, je suis capable d'extraire datatables de la version et de les stocker dans les versions de parameters de la table. Mais maintenant je dois parcourir pour effectuer quelques manipulations comme

  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 

Comment spécifier une condition qui ne s'exécutera que si @Versions a une valeur (incrémentielle – pour la version 1, exécutez une mise à jour, puis faites la même chose pour v2, puis quittez)

Aussi s'il vous plaît suggérer s'il y a une meilleure façon de le faire!

Vous pouvez utiliser ROW_NUMBER comme ci-dessous:

 ;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 

Ou vous pouvez utiliser 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