T-SQL: Verwenden eines CASE in einer UPDATE-Anweisung, um bestimmte Spalten abhängig von einer Bedingung zu aktualisieren
Frage ich mich, ob dies überhaupt möglich ist. Ich will update-Spalte x, wenn eine Bedingung wahr ist, sonst y-Spalte aktualisiert
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Ich habe gesucht alle über, versucht, einige Dinge und bin nicht in der Lage, eine Lösung zu finden. Ich denke, es ist nicht möglich, aber ich dachte, ich würde hier Fragen und sehen, ob jemand hat es getan, bevor. Vielen Dank im Voraus.
InformationsquelleAutor der Frage pqsk | 2011-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden Sie eine Bedingung, ändern Sie die Struktur der Abfrage verwendet, werden nur die Daten einbezogen. Sie könnten dies tun:
Dies ist semantisch das gleiche, aber nur daran denken, dass beiden Spalten werden immer aktualisiert. Diese wahrscheinlich wird nicht dazu führen Sie irgendwelche Probleme, aber wenn Sie haben eine hohe Transaktions-Volumen, kann Parallelitätsprobleme verursachen.
Der einzige Weg, das zu tun speziellwas Sie Fragen, ist die Verwendung von dynamischem SQL. Dies ist allerdings etwas, möchte ich Sie dazu ermutigen, zu bleiben Weg von. Die Lösung oben, werden sicherlich ausreichend für das, was Sie suchen.
InformationsquelleAutor der Antwort Adam Robinson
InformationsquelleAutor der Antwort Quassnoi
Ich ändern oder aktualisieren möchten meine ContactNo zu 8018070999 wo es 8018070777 die Nutzung der Case-Anweisung
InformationsquelleAutor der Antwort Debendra Dash
Ich glaube, dass kann man auch weglassen Aktualisierung der "nicht-gewünschte" Spalten anpassen die anderen Antworten wie folgt aus:
update table set
columnx = (case when condition1 then 25 end),
columny = (case when condition2 then 25 end)
Wie ich es verstehe, wird dieses update nur, wenn die Bedingung erfüllt ist.
Nach der Lektüre all die Kommentare, dies ist der effizienteste:
Update table set ColumnX = 25 where Condition1
Update table set ColumnY = 25 where Condition1
Beispiel-Tabelle:
CREATE TABLE [dbo].[tblTest](
[ColX] [int] NULL,
[ColY] [int] NULL,
[ColConditional] [bit] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
Beispiel-Daten:
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0)
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0)
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1)
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1)
Insert into tblTest (ColX, ColY, ColConditional) values (1, null, null)
Insert into tblTest (ColX, ColY, ColConditional) values (2, null, null)
Insert into tblTest (ColX, ColY, ColConditional) values (null, 1, null)
Insert into tblTest (ColX, ColY, ColConditional) values (null, 2, null)
Nun ich nehme an, Sie können schreiben Sie eine bedingte behandelt null-Werte. Für mein Beispiel nehme ich an, dass Sie geschrieben haben, so eine bedingte, wertet zu True, False oder Null. Wenn Sie hierbei Hilfe benötigen, lass es mich wissen und ich werde mein bestes tun.
Jetzt laufen diese beiden Codezeilen sind in der Tat ändern Sie X, um die 25, wenn, und nur wenn ColConditional ist True(1) und Y, um die 25, wenn, und nur wenn ColConditional ist False(0),
Update tblTest set ColX = 25 where ColConditional = 1
Update tblTest set ColY = 25 where ColConditional = 0
P. S. Das null-Fall wurde nie erwähnt, in der ursprünglichen Frage oder Aktualisierungen auf die Frage, aber wie Sie sehen können, ist dies sehr einfach beantworten, Griffen Sie trotzdem.
InformationsquelleAutor der Antwort John Greiner