Aktualisieren Sie eine Tabelle mithilfe von JOIN in SQL Server?
Möchte ich zum aktualisieren einer Spalte in einer Tabelle macht einen join auf eine andere Tabelle z.B.:
UPDATE table1 a
INNER JOIN table2 b ON a.commonfield = b.[common field]
SET a.CalculatedColumn= b.[Calculated Column]
WHERE
b.[common field]= a.commonfield
AND a.BatchNO = '110'
Aber es beschwert sich :
Msg 170, Level 15, State 1, Line 2
Zeile 2: Falsche syntax in der Nähe 'eine'.
Was ist hier falsch?
InformationsquelleAutor der Frage Manjot | 2009-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie nicht ganz haben, SQL-Server, proprietäre
UPDATE FROM
syntax nach unten. Auch nicht sicher, warum Sie benötigt, um uns auf dieCommonField
und auch filter auf es später. Versuchen Sie dies:Wenn du etwas tust, wirklich dumm - wie ständig versucht, den Wert einer Spalte auf die Summe der anderen Spalte (die gegen das Prinzip der Vermeidung der Speicherung redundanter Daten), die Sie verwenden können,ein allgemeiner Tabellenausdruck (common table expression):
Der Grund, warum dies ist wirklich dumm, dass du gehst zu haben, um re-run diese ganze update jedes mal jede Zeile in
table2
änderungen. EinSUM
ist etwas, das Sie immer zur Laufzeit ermittelt werden und damit nie sorgen zu machen, dass das Ergebnis veraltet ist.InformationsquelleAutor der Antwort Aaron Bertrand
Versuchen Sie es so:
(edit: verdammte Tippfehler!)
InformationsquelleAutor der Antwort RBarryYoung
Antwort oben von Aaron ist perfekt:
Möchte nur hinzufügen, warum dieses problem tritt in SQL Server, wenn wir versuchen, verwenden Sie alias einer Tabelle beim aktualisieren der, Tabelle, unten erwähnen syntax wird immer Fehler geben:
Fall kann sein, wenn Sie die Aktualisierung einer einzelnen Tabelle oder aktualisieren während der Verwendung von join.
Obwohl die obige Abfrage funktioniert in PL/SQL, aber nicht in SQL Server.
Richtige Weg, um die Tabelle aktualisiert, während Sie mit dem Tabellen-alias in der SQL Server ist:
Hoffe, es wird allen helfen warum der Fehler kam hier.
InformationsquelleAutor der Antwort Ankur Bhutani
InformationsquelleAutor der Antwort onedaywhen
Scheint, wie SQL Server 2012 kann mit den alten update-syntax von Teradata zu:
Wenn ich mich richtig erinnere, 2008R2 gab Fehler, wenn ich versuchte, ähnliche Anfrage.
InformationsquelleAutor der Antwort nyunyu
Weitere alternativen hier: http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/
InformationsquelleAutor der Antwort Tigerhajen
Ich es nützlich finden, machen Sie ein UPDATE in eine WÄHLEN Sie, um die Zeilen, die ich aktualisieren möchten, als einen test, bevor Sie aktualisieren. Wenn ich wählen Sie die genauen Zeilen, die ich will, kann ich das update nur die Zeilen, die ich aktualisieren möchten.
InformationsquelleAutor der Antwort CW1255
Ein weiterer Ansatz wäre die Verwendung von MERGE -
-Merge ist Teil des SQL-Standards
-Auch ich bin mir ziemlich sicher, dass inner-join-updates sind nicht deterministisch..
Ähnliche Frage, hier die Antwort spricht darüber, dass
http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html
InformationsquelleAutor der Antwort Shane Neuville
Versuchen:
InformationsquelleAutor der Antwort user140301