Ich möchte zwei Tabellen auf einmal aktualisieren. Wie mache ich das in 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'
sql
sql-server
sql-server-2005
tsql
Jango
quelle
quelle
Antworten:
Sie können nicht mehrere Tabellen in einer Anweisung aktualisieren. Sie können jedoch eine Transaktion verwenden, um sicherzustellen, dass zwei
UPDATE
Anweisungen atomar behandelt werden. Sie können sie auch stapeln, um eine Rundreise zu vermeiden.quelle
Sie können nicht zwei Tabellen gleichzeitig aktualisieren, aber Sie können ein Update mit einer Einfügung verknüpfen
OUTPUT INTO
und diese Ausgabe als Join für das zweite Update verwenden:Ich habe Ihre Beispielbedingung
WHERE
in ein anderes Feld als geändertid
. Wenn esid
das ist, was Sie nicht brauchenOUTPUT
, können Sie nurUPDATE
den zweiten Tisch für das gleicheid='010008'
.quelle
T1.field
seinTable1.field
?Sorry, afaik, das kannst du nicht. Um Attribute in zwei verschiedenen Tabellen zu aktualisieren, müssen Sie zwei separate Anweisungen ausführen. Sie können sich jedoch in einem Stapel befinden (eine Reihe von SQL, die in einem Roundtrip an den Server gesendet werden).
quelle
Die kurze Antwort darauf lautet nein. Während Sie in der
from
Klausel einer Update-Anweisung mehrere Tabellen eingeben können , können Sie nach demupdate
Schlüsselwort nur eine einzige Tabelle angeben . Selbst wenn Sie eine "aktualisierbare" Ansicht schreiben (bei der es sich lediglich um eine Ansicht handelt, die bestimmten Einschränkungen folgt), schlagen Aktualisierungen wie diese fehl. Hier sind die relevanten Clips aus der MSDN-Dokumentation (Schwerpunkt liegt bei mir).UPDATE (Transact-SQL)
CREATE VIEW (Transact-SQL)
Um ehrlich zu sein, sollten Sie jedoch in Betracht ziehen, zwei verschiedene SQL-Anweisungen innerhalb einer Transaktion gemäß dem Beispiel von LBushkin zu verwenden.
UPDATE: Meine ursprüngliche Behauptung, dass Sie mehrere Tabellen in einer aktualisierbaren Ansicht aktualisieren könnten, war falsch. Unter SQL Server 2005 und 2012 wird der folgende Fehler generiert. Ich habe meine Antwort korrigiert, um dies widerzuspiegeln.
quelle
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.
Dies funktioniert für MySQL und ist eigentlich nur eine implizite Transaktion, aber es sollte ungefähr so aussehen:
Wenn Sie Aktualisierungen an mehreren Tabellen durchführen, für die mehrere Anweisungen erforderlich sind. Dies ist wahrscheinlich möglich, wenn Sie eine und eine andere basierend auf anderen Bedingungen aktualisieren. Sie sollten eine Transaktion verwenden.
quelle
Sie sollten zwei Update-Anweisungen in eine Transaktion einfügen
quelle
Sie können eine Aktualisierungsanweisung für eine Tabelle und dann einen Auslöser für die Aktualisierung der ersten Tabelle schreiben , wodurch die zweite Tabelle aktualisiert wird
quelle
Aus meiner Sicht können Sie dies tun, indem Sie zwei Tabellen in SQL SERVER eins zu eins aktualisieren:
quelle
Es ist so einfach wie diese unten gezeigte Abfrage.
quelle