Ich habe eine mehrzeilige Update-Abfrage, die nicht funktioniert, wie ich es erwarte. Die JOIN
Bedingung wird in der SELECT
Anweisung, aber nicht in der UPDATE
Anweisung eingehalten.multirow SQL-Update funktioniert nicht wie erwartet - SELECT-Ergebnis unterscheidet sich von UPDATE-Ergebnis
Mit anderen Worten: Ich änderte 1 Zeile, die SELECT
Abfrage zeigt nur 1 Ergebnis (wie erwartet). Ich konvertiere die Abfrage in eine UPDATE
-Anweisung und führe sie aus - alle Zeilen in der Tabelle werden auf denselben Wert geändert - die JOIN
-Bedingung wird vollständig ignoriert.
Ich dachte, es war aufgrund einer Tabelle Variable, so dass ich eine temporäre Tabelle verwendet und die gleichen Ergebnisse erhalten. Ich verifizierte meine JOIN
Zustand vergleicht den gleichen Datentyp (es ist ein INNER JOIN
). Ich bin ratlos, warum dies nicht
SELECT
(o.SubTotal - o.OrderDiscounts) AS OrderSubTotal,
t.CommRate * (o.SubTotal - o.OrderDiscounts) AS CommDue,
'MODIFIED' AS "Status"
FROM
bvc_Order o
INNER JOIN
#tbl t ON o.OrderNumber = t.OrderNumber
Umgerechnet auf eine UPDATE
Anweisung arbeiten:
UPDATE AffiliateComm
SET [OrderSubtotal] = (o.SubTotal - o.OrderDiscounts),
[CommDue] = t.CommRate * (o.SubTotal - o.OrderDiscounts),
[Status] = 'MODIFIED'
FROM
bvc_Order o
INNER JOIN
#tbl t ON o.OrderNumber = t.OrderNumber
Ich habe getan, um die gleiche Abfrage mit einem Tabellenvariable - (wählen Werken, update aktualisiert immer alle Zeilen & ignoriert JOIN-Bedingung) keine Freude.
Fremder noch, wenn ich eine WHERE
Klausel auf das Ende setzen, ist es IGNORED! Wie in
WHERE o.OrderNumber = t.OrderNumber
Ich habe Anfragen wie diese vorher getan und nie hatte dieses Problem.
Der Ausgang der SELECT
Abfrage (als Beispiel, wenn 1 Zeile geändert werden muss)
OrderSubTotal CommDue Status
----------------------------------
1285.20 38.56 MODIFIED
, wenn ich die Update-Abfrage:
(1 Zeile (n) betroffen) < - Dies ist die temporäre Tabelle (oder Variable) mit 1 Zeile eingefügt, wie es sollte Korrekt
(5 Reihe (n) betroffen) < - Dies ist die falsche Anzahl der Zeilen von der UPDATE betroffen (s hould be 1)
Gibt es eine Einstellung in SQL Server 2012, die falsch ist? Wenn Sie innerlich einer Tabelle mit einer Zeile beitreten, ist es nicht möglich, mehr als eine Zeile als Ergebnismenge zu haben, oder?
Ich bin verwirrt.
Was AffiliateComm ist? Es ist nicht in einem Ihrer Beitrittskriterien. – Yobik
^Ich habe nur alte Abfragen ähnlich gebaut - du hast Recht, AffiliateComm ist nicht in der Join-Bedingung (das muss das Problem sein - Herstellung von Mehrdeutigkeit), muss aber sein. Ich arrangiere das neu. – MC9000