Ich frage mich, ob das überhaupt möglich ist. Ich möchte Spalte x aktualisieren, wenn eine Bedingung erfüllt ist, andernfalls würde Spalte y aktualisiert
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Ich habe überall gesucht, einige Dinge ausprobiert und kann keine Lösung finden. Ich denke, es ist nicht möglich, aber ich dachte, ich würde hier fragen und sehen, ob es schon jemand getan hat. Danke im Voraus.
sql
sql-update
case
pqsk
quelle
quelle
Antworten:
Sie können keine Bedingung verwenden, um die Struktur Ihrer Abfrage zu ändern, sondern nur die beteiligten Daten. Sie könnten dies tun:
Dies ist semantisch gleich, aber denken Sie daran, dass beide Spalten immer aktualisiert werden . Dies wird Ihnen wahrscheinlich keine Probleme bereiten. Wenn Sie jedoch ein hohes Transaktionsvolumen haben, kann dies zu Parallelitätsproblemen führen.
Die einzige Möglichkeit, genau das zu tun, was Sie verlangen, ist die Verwendung von dynamischem SQL. Dies ist jedoch etwas, von dem ich Sie ermutigen würde, sich fernzuhalten. Die obige Lösung wird mit ziemlicher Sicherheit für das ausreichen, wonach Sie suchen.
quelle
quelle
23
Sekunden bevor er sie gepostet hat. Ich bin ein schneller Copypaster!* min ago
, wird die genaue Uhrzeit der Veröffentlichung angezeigt .Ich möchte meine ContactNo auf 8018070999 ändern oder aktualisieren, wobei 8018070777 mithilfe der Case-Anweisung vorhanden ist
quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber das hat bei mir funktioniert:
Grüße
quelle
Ich weiß, dass dies eine sehr alte Frage ist und das Problem als behoben markiert ist. Wenn jedoch jemand in einem Fall wie dem meinen einen Auslöser für die Datenprotokollierung bei Aktualisierungsereignissen hat, führt dies zu Problemen. Beide Spalten erhalten das Update und das Protokoll macht unbrauchbare Einträge. So wie ich es gemacht habe
Dies hat einen weiteren Vorteil: Es werden keine unnötigen Schreibvorgänge wie bei den obigen Lösungen in die Tabelle aufgenommen.
quelle
Ich glaube, dass Sie die Aktualisierung der "unerwünschten" Spalten unterlassen können, indem Sie die anderen Antworten wie folgt anpassen:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
Soweit ich weiß, wird dies nur aktualisiert, wenn die Bedingung erfüllt ist.
Nachdem Sie alle Kommentare gelesen haben, ist dies am effizientesten:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
Beispieltabelle:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Beispieldaten:
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 gehe ich davon aus, dass Sie eine Bedingung schreiben können, die Nullen behandelt. In meinem Beispiel gehe ich davon aus, dass Sie eine solche Bedingung geschrieben haben, die True, False oder Null ergibt. Wenn Sie dabei Hilfe benötigen, lassen Sie es mich wissen und ich werde mein Bestes geben.
Wenn Sie nun diese beiden Codezeilen ausführen, ändert sich X genau dann auf 25, wenn ColConditional True (1) und Y auf 25 genau dann, wenn ColConditional False (0) ist.
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PS Der Nullfall wurde in der ursprünglichen Frage oder in Aktualisierungen der Frage nie erwähnt, aber wie Sie sehen können, behandelt diese sehr einfache Antwort sie trotzdem.
quelle