簡體   English   中英

如何使用 case 語句更新 oracle sql 服務器更新中的兩個變量

[英]How do I update two variables in a oracle sql server update using case statement

我正在嘗試更新 Oracle 服務器中的兩個變量,如下所示:

UPDATE UserTable
SET user_email='asdf@company.com', 
               (CASE WHEN reason != '' THEN why_update= 'change email server' END)
WHERE user_id = 123

我只想在用戶提供更新原因的情況下更新 why_update 列,否則保持列不變(它是 varchar 類型,可以為 NULL)。

還是有其他更好的解決方案?

這將起作用:

UPDATE UserTable
SET user_email='asdf@company.com', 
    why_update= CASE WHEN reason != '' THEN 'change email server' else why_update END
WHERE user_id = 123

如果您嘗試更新多個列,則需要這樣做:

UPDATE UserTable
SET user_email = 'asdf@company.com', 
    why_update = CASE WHEN reason IS NOT NULL THEN 'change email server' END
WHERE user_id = 123;

您最終將始終更新兩列 - 在這種情況下,如果reason是 null,那么為什么會將why_update設置為 NULL,從而丟失之前的任何值。 如果您不希望這種情況發生,則需要在CASE表達式中添加ELSE why_update子句。

注意,我已將您的!= ''更改為IS NOT NULL ,因為空字符串 ( '' ) 在 Oracle 中被識別為 NULL。 NULL 永遠不會匹配equalsnot equals檢查,所以你上面的CASE表達式不會工作,因為我懷疑你希望它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM