Je veux mettre à jour deux tables en une seule fois. Comment faire cela dans SQL Server 2005?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
Réponses:
Vous ne pouvez pas mettre à jour plusieurs tables dans une seule instruction, cependant, vous pouvez utiliser une transaction pour vous assurer que deux
UPDATE
instructions sont traitées atomiquement. Vous pouvez également les regrouper pour éviter un aller-retour.la source
Vous ne pouvez pas mettre à jour deux tables à la fois, mais vous pouvez lier une mise à jour dans un insert à l'aide de
OUTPUT INTO
, et vous pouvez utiliser cette sortie comme jointure pour la deuxième mise à jour:J'ai changé votre
WHERE
condition d' exemple pour un autre champ queid
. Siid
vous n'avez pas besoin de cette fantaisieOUTPUT
, vous pouvez simplement utiliserUPDATE
la deuxième table pour la même choseid='010008'
.la source
T1.field
censé l'êtreTable1.field
?Désolé, afaik, vous ne pouvez pas faire ça. Pour mettre à jour les attributs dans deux tables différentes, vous devrez exécuter deux instructions distinctes. Mais ils peuvent être dans un lot (un ensemble de SQL envoyé au serveur en un aller-retour)
la source
La réponse courte est non. Bien que vous puissiez saisir plusieurs tableaux dans le
from
clause d'une instruction de mise à jour, vous ne pouvez spécifier qu'une seule table après leupdate
mot clé. Même si vous écrivez une vue "modifiable" (qui est simplement une vue qui suit certaines restrictions), les mises à jour comme celle-ci échoueront. Voici les extraits pertinents de la documentation MSDN (c'est moi qui souligne).MISE À JOUR (Transact-SQL)
CRÉER UNE VUE (Transact-SQL)
En toute honnêteté, cependant, vous devriez envisager d'utiliser deux instructions SQL différentes dans une transaction, selon l'exemple de LBushkin.
MISE À JOUR: Mon affirmation originale selon laquelle vous pouviez mettre à jour plusieurs tables dans une vue pouvant être mise à jour était fausse. Sur SQL Server 2005 et 2012, il générera l'erreur suivante. J'ai corrigé ma réponse pour refléter cela.
la source
INSTEAD OF Specifies that the DML trigger is executed instead of the triggering SQL statement, therefore, overriding the actions of the triggering statements. INSTEAD OF cannot be specified for DDL or logon triggers.
Cela fonctionne pour MySQL et n'est vraiment qu'une transaction implicite, mais cela devrait ressembler à ceci:
si vous effectuez des mises à jour de plusieurs tables qui nécessitent plusieurs instructions… ce qui est probablement possible si vous en mettez à jour une, puis une autre en fonction d'autres conditions… vous devez utiliser une transaction.
la source
Vous devez placer deux instructions de mise à jour dans une transaction
la source
Vous pouvez écrire une instruction de mise à jour pour une table , puis un déclencheur lors de la première mise à jour de la table , qui met à jour la deuxième table
la source
De mon point de vue, vous pouvez le faire, sa mise à jour une à une de deux tables dans SQL SERVER:
la source
C'est aussi simple que cette requête ci-dessous.
la source