SQL Update mit Fall, entweder zuweisen oder nichts tun

Kommen aus der Rückseite dieser Frage hier, ist es ein Weg, um ein CASE - Anweisung in einer SQL - UPDATE dass entweder update oder nichts tut. Derzeit habe ich die folgenden:

UPDATE CustomerAddress
SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE 0 END
FROM CustomerAddress
join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master]
join CustomerAddress c2 on p1.[Id to delete]=c2.Id 

Entsteht das problem in dieser Zeile:

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE **0** END

Wenn ich es auf 0, sonst. Der update-check sollte die erste Bedingung, und wenn ja, auf 1 gesetzt, ist aber, wenn die Bedingung nicht erfüllt ist, ich möchte nicht auf 0 gesetzt, muss ich behalten den ursprünglichen Wert.

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *CustomerAddress.IsPrimary* END

Nicht funktioniert aber, denn es bekommt den Wert aus der FROM - Anweisung, dann eher den Wert, den es hat momentan zu. Was ich will, ist so etwas wie das

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *Do nothing* END

Aber das ist noch eine Aufgabe, und versucht zu NULL.

Ist das oben möglich?

UPDATE:

Beispieldaten:

paar von ID ist, die Sie vertreten-Adresse als so

ID to keep  ID to delete
------------------------
10          21
10          22
11          31
12          41

Konzentriere ich mich auf das, was passiert mit dem 10. So 10 IsPrimaryAddress=0, 21 hat IsPrimaryAddress=1, und 22 hat IsPrimaryAddress=0.

Was ich glaube, passiert ist dies (in pseudocode):

Set IsPrimaryAddress = wenn 21.IsPrimaryAddress=1, dann Satz zu 21.IsPrimaryAddress sonst auf 10 gesetzt.IsPrimaryAddress

Daher haben wir 10.IsPrimaryAddress zu 1. Jetzt:

Set IsPrimaryAddress = wenn 22.IsPrimaryAddress=1, dann Satz zu 22.IsPrimaryAddress sonst auf 10 gesetzt.IsPrimaryAddress

Denen ich hoffen würde, 10.IsPrimaryAddress gleich 1 ist. Aber es scheint, um die original-Wert 0, und jetzt das update verloren gegangen ist.

Können Sie erklären, was ist anders zu dem Wert in der FROM vs. "der Wert ist aktuell eingestellt"?
Siehe mein Kommentar auf deine Antwort, hoffentlich wird das erklären, was ich denke, passiert.
Bitte posten Sie sample-Daten in die beiden Tabellen und das, was Sie wollen, dass die source-Tabelle Aussehen nach. Word-Probleme und Theorien sind schwer zu lösen.
Wenn Sie eine Menge von update-Abfragen, Blick in die MERGE-Anweisung. Es ermöglicht es Ihnen, explizit zu verarbeiten, was passiert, wenn Sie übereinstimmen/nicht übereinstimmen. Leider Onlinedokumentation ist eine Art ... ich fand es dichter als gewohnt an das Thema. Denken Sie daran, "MIT" bedeutet "VERBINDEN" und es könnte schneller gehen für Sie. Check dieser und dieser wenn Sie interessiert sind
Danke ich werde das prüfen, ich habe gesehen, es kommen ein paar mal, aber um ehrlich zu sein, ich schaute über es und dachte: 'ich komme später noch darauf zurück...'

InformationsquelleAutor dann.dev | 2012-03-21

Schreibe einen Kommentar