2010-08-18 8 views
0

J'ai table avec deux colonnes:Insérer ou mettre à jour sans boucle?

ItemMaster (Item INT, Quantity INT) 

Si un article est déjà là, je devrais mettre à jour la quantité. Sinon, je dois insérer un enregistrement dans cette table.

Est-ce possible sans boucle?

J'utilise SQL Server 2005.

+0

une possibilité de redresser 2 requêtes différentes. – hgulyan

Répondre

4

Il peut se faire sans une boucle oui:

UPDATE table1 
SET Quantity = Quantity + 1 
WHERE Item = @itemID 

IF @@ROWCOUNT = 0 
    INSERT INTO table1 (Item, Quantity) 
    VALUES (@itemID, 1) 
+0

Vous avez raison mais pour votre réponse je dois utiliser la boucle de tout l'article et traiter un par un que ce n'est possible. – KuldipMCA

+0

Ma réponse n'implique aucune boucle. Vous devrez peut-être modifier votre question s'il y a une autre exigence ici quelque part. – Codesleuth

+0

oui mais pour cela, vous devez utiliser la clause IN comme cela O WH IDENTIFIER (Sélectionnez ItemID de ITEMMASTER) – KuldipMCA

1

POUR une ligne

IF EXISTS (SELECT * from ItemMaster WHERE Item = @Item) 
    UPDATE ItemMaster 
     SET Quantity = @Quantity 
    WHERE Item = @Item 
ELSE 
    INSERT INTO ItemMaster VALUES(@Item, @Quantity) 

Pour de nombreuses lignes:

INSERT INTO ItemMaster (Item, Quantity) 
SELECT Item, Quantity 
FROM AnotherTable a 
WHERE NOT EXISTS (Select 1 from ItemMaster i Where i.Item = a.Item); 

UPDATE ItemMaster i 
    SET Quantity = a.Quantity 
FROM AnotherTable a 
WHERE a.Item = i.Item 
Questions connexes