Saya bertanya-tanya apakah ini mungkin sama sekali. Saya ingin memperbarui kolom x jika kondisinya benar, jika tidak, kolom y akan diperbarui
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Saya telah mencari di mana-mana, mencoba beberapa hal dan tidak dapat menemukan solusi. Saya pikir itu tidak mungkin, tetapi saya pikir saya akan bertanya di sini dan melihat apakah ada yang pernah melakukannya sebelumnya. Terima kasih sebelumnya.
sql
sql-update
case
pqsk.dll
sumber
sumber
Jawaban:
Anda tidak dapat menggunakan kondisi untuk mengubah struktur kueri Anda, hanya data yang terlibat. Anda bisa melakukan ini:
Ini secara semantik sama, tetapi perlu diingat bahwa kedua kolom akan selalu diperbarui . Ini mungkin tidak akan menimbulkan masalah bagi Anda, tetapi jika Anda memiliki volume transaksi yang tinggi, ini dapat menyebabkan masalah konkurensi.
Satu-satunya cara untuk melakukan spesifik apa yang Anda minta adalah dengan menggunakan SQL dinamis. Namun, ini adalah sesuatu yang saya dorong untuk Anda hindari. Solusi di atas hampir pasti akan cukup untuk apa yang Anda cari.
sumber
sumber
23
detik sebelum dia mempostingnya. Saya salah satu copypaster cepat!* min ago
, ini akan menunjukkan kepada Anda waktu yang tepat saat diposkan.Saya ingin mengubah atau memperbarui ContactNo saya ke 8018070999 di mana ada 8018070777 menggunakan pernyataan Kasus
sumber
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi ini berhasil untuk saya:
Salam
sumber
Saya tahu ini adalah pertanyaan yang sangat lama dan masalahnya ditandai sebagai sudah diperbaiki. Namun, jika seseorang dengan kasus seperti saya di mana tabel memicu pencatatan data pada peristiwa pembaruan, ini akan menyebabkan masalah. Kedua kolom akan mendapatkan pembaruan dan log akan membuat entri yang tidak berguna. Cara saya melakukannya
Sekarang ini memiliki keuntungan lain yaitu tidak ada penulisan yang tidak perlu pada tabel seperti solusi di atas.
sumber
Saya yakin Anda dapat menghilangkan pembaruan kolom "tidak diinginkan" dengan menyesuaikan jawaban lain sebagai berikut:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
Seperti yang saya pahami, ini akan diperbarui hanya jika kondisi terpenuhi.
Setelah membaca semua komentar, ini yang paling efisien:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
Tabel Sampel:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Data Sampel:
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)
Sekarang saya berasumsi Anda dapat menulis kondisi yang menangani nulls. Untuk contoh saya, saya berasumsi bahwa Anda telah menulis kondisi yang bernilai True, False atau Null. Jika Anda membutuhkan bantuan dalam hal ini, beri tahu saya dan saya akan melakukan yang terbaik.
Sekarang menjalankan dua baris kode ini sebenarnya mengubah X menjadi 25 jika dan hanya jika ColConditional True (1) dan Y menjadi 25 jika dan hanya jika ColConditional False (0)
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PS Kasus nol tidak pernah disebutkan dalam pertanyaan asli atau pembaruan apa pun pada pertanyaan, tetapi seperti yang Anda lihat, jawaban yang sangat sederhana ini tetap menangani mereka.
sumber