2017-10-12 2 views
-3

Je souhaite mettre à jour une table contenant 2 millions de lignes. Je veux mettre à jour trois colonnes dans ce tableau pour un nom d'article particulier qui est de Table POII qui contient 800 lignes et 3 colonnes.mise à jour de boucle Curseur dans le serveur SQL

Je dois écrire un curseur pour que dans SQL Server 2014.

Comment dois-je écrire? Cela donne une erreur de syntaxe.

Le tableau avec 2 millions de disques est MNB

DECLARE cursor1 CURSOR FOR 
    Select * from poii ; 
OPEN c1; 


Begin 
while i in cursor1 loop 


Update MNB set salesgroup=i.salesgroup, category= i.category ,subcategory =i.subcategory where itemname = i.itemname; 

Commit; 
+1

Ceci est une bonne ressource pour la syntaxe d'un curseur: https://blog.sqlauthority.com/2007/01/01/sql-server-simple-example-of-cursor/amp/ – mendosi

+0

Pouvez-vous s'il vous plaît aidez-moi avec ma requête en passant par votre lien ... – Khokae

+2

Homme, voir @mendosi répondre en utilisant le curseur dans ce cas (et dans la plupart des cas) est une surcharge – jean

Répondre

2

À moins que je manque des informations cruciales, cette requête ne doit pas être écrite comme un curseur. Il est une mise à jour simple et doit être écrit quelque chose comme ceci:

UPDATE MNB 
    SET salesgroup = i.salesgroup, 
     category = i.category, 
     subcategory = i.subcategory 
    FROM MNB 
    JOIN poii ON MNB.itemname = poii.itemname; 

Ce genre de mise à jour devrait être beaucoup plus efficace et plus rapide pour vous d'écrire, d'un curseur.

Un curseur serait écrit quelque chose comme ceci. Notez que vous devez déclarer des variables pour contenir les valeurs dans la ligne actuelle du curseur, et vous devez récupérer chaque ligne. Ne pas oublier de fermer et de libérer le curseur.

DECLARE @salesgroup varchar(10); 
DECLARE @category varchar(10); 
DECLARE @subcategory varchar(10); 
DECLARE @itemname varchar(10); 
DECLARE cursor1 CURSOR LOCAL FAST_FORWARD FOR (
    SELECT salesgroup, category, subcategory, itemname 
     FROM poii); 
OPEN cursor1; 
FETCH NEXT FROM cursor1 INTO @salesgroup, @category, @subcategory, @itemname; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    UPDATE MNB 
     SET salesgroup = @salesgroup, 
      category = @category, 
      ... 
     WHERE itemname = @itemname; 

    FETCH NEXT FROM cursor1 INTO @salesgroup, @category, @subcategory, @itemname; 
END 
CLOSE cursor1; 
DEALLOCATE cursor1; 
+0

,,, Donc merci à vous car il travaillait avec la commande Update, mais quand je suis Firing Cursor sur le serveur sql cette erreur se produit .. "Msg 137, Niveau 15, Etat 2, Ligne 9 Doit déclarer la variable scalaire" at le groupe de ventes de taux " Cette erreur se produit lorsque j'exécute la ligne" FETCH NEXT FROM cursor1 INTO au groupe de vente de taux, à la catégorie de taux, à la sous-catégorie de taux, au taux nom d'élément; " – Khokae