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 

Jusqu'à présent, je suis capable d'extraire les données de la version et de les stocker dans des versions de paramètres de valeur table. Mais maintenant, je dois parcourir pour effectuer certaines manipulations commeComment stocker un tableau de valeurs dans SQL Server et le parcourir

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 la condition qui fonctionnera seulement jusqu'à @Versions a une valeur (par incréments - pour la version 1 exécuter une mise à jour, puis faire de même pour pour v2, puis sortie)

Veuillez également suggérer s'il y a une meilleure façon de le faire!

+0

Avez-vous pris un regard sur les curseurs dans le serveur SQL? Ils sont déclarés sur un ensemble et peuvent être utilisés pour récupérer des valeurs dans une ou plusieurs variables. Vous pouvez configurer une boucle while qui s'exécute tant qu'il reste des enregistrements dans le jeu de curseurs. Si vous voulez résoudre sans curseurs, une solution possible dépend de ce que vous essayez de faire. Cela est généralement possible à moins que votre curseur ne soit utilisé pour définir SQL dynamique à exécuter. –

Répondre

1

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