Je gardais un ensemble de valeurs (1 enregistrement) à une table de cette façon:SQL multiples INSERT ou UPDATE
UPDATE Table SET ...
IF @@ROWCOUNT = 0 INSERT INTO Table ...
Cela a bien fonctionné, mais maintenant je dois ajouter des enregistrements plus indépendants en même temps , donc j'ai essayé quelque chose comme:
UPDATE Table SET ...
IF @@ROWCOUNT = 0 INSERT INTO Table ...
UPDATE Table SET ...
IF @@ROWCOUNT < 2 INSERT INTO Table ...
UPDATE Table SET ...
IF @@ROWCOUNT < 3 INSERT INTO Table ...
UPDATE Table SET ...
IF @@ROWCOUNT < 4 INSERT INTO Table ...
... pour le garder en 1 transaction. Cependant, à partir de la 2ème déclaration, il ajoute des lignes, même si la ligne particulière est déjà en place - apparemment @@ROWCOUNT
ne compte pas INSERT
lignes ées, ou je mal compris le concept d'une autre manière ...
Je me demande s'il y a une manière possible pour résoudre cela dans la requête SQL. Dans ce cas particulier, devrait être OK pour supposer que tous les enregistrements dépendent de l'existence de la première, mais il n'est pas fiable à 100% et je voudrais savoir une meilleure solution, si elle existe.
EDIT - solution:
Cela peut ne pas être possible dans toutes les applications (être au courant, que les mises à jour particulières ne sont pas vérifiées séparément), mais dans mon cas, il apears bien fonctionner et doivent aussi être compatibles avec les données, car l'ensemble des données mises à jour/insérées est intégral.
UPDATE Table SET ...
UPDATE Table SET ...
UPDATE Table SET ...
UPDATE Table SET ...
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO Table ...
INSERT INTO Table ...
INSERT INTO Table ...
INSERT INTO Table ...
END
Vous devriez être en mesure d'en faire une sous-requête ... quelque chose comme 'insérer dans la casse de la table lorsque row_count = 0 alors ... quand row_count = 1 puis ... end comme stuff de (select count (1) as row_count de la table) a; '? –
Oh wait ... est '@@ ROWCOUNT' le nombre de lignes affectées par le premier' UPDATE'? Mon tsql est assez rouillé. –
Hmm, pardonnez mon manque de connaissances, mais une sous-requête fonctionnera-t-elle vraiment (avec de nouvelles données) avant que la transaction soit terminée? –