SQL条件更新与案例

时间:2014-04-02 09:41:07

标签: sql-server

我试图对ntext字段进行条件更新。在一种情况下,我希望它附加到该领域。在另一方面,我希望它能独自离开这个领域。代码是..

UPDATE CC
    SET Comm_Note = CASE DESC_REG WHEN NULL THEN COMM_NOTE ELSE rtrim(CONVERT(NVARCHAR(MAX),comm_note))+ 'Registration Issue: '+  LTRIM(DESC_REG) END
FROM 
    RAW_DATA RD
    INNER JOIN CONFIRMIT_COMMUNICATION CC ON CC.RESPONSEID = RD.RESPONSEID

因此,当DESC_REG字段为空时,它应该基本上保留COMM_NOTE字段的当前值,但是当它不为空时,它应该附加到字段。附加位有效,但当DESC_REG为空时,代码完全将COMM_NOTE字段置空

帮助!

4 个答案:

答案 0 :(得分:0)

two CASE expression formats

您正在使用简单CASE表达式来处理Null您需要将CASE表达式更改为搜索CASE格式:

UPDATE CC
SET Comm_Note = CASE WHEN DESC_REG Is NULL THEN Comm_Note
                 ELSE ... END
FROM ...

简单CASE表达式使用=运算符,该运算符不能用于检查NULL值,因为SQL Server中未定义NULL

答案 1 :(得分:0)

UPDATE CC
    SET Comm_Note = CASE
                        WHEN DESC_REG IS NULL
                        THEN COMM_NOTE
                        ELSE rtrim(CONVERT(NVARCHAR(MAX),comm_note))+ 'Registration Issue: ' + LTRIM(DESC_REG)
                    END
FROM 
    RAW_DATA RD
    INNER JOIN CONFIRMIT_COMMUNICATION CC ON CC.RESPONSEID = RD.RESPONSEID

答案 2 :(得分:0)

你可以尝试一次,

UPDATE CC
    SET Comm_Note = CASE WHEN DESC_REG IS NULL THEN COMM_NOTE ELSE rtrim(CONVERT(NVARCHAR(MAX),comm_note))+ 'Registration Issue: '+  LTRIM(DESC_REG) END
FROM 
    RAW_DATA RD
    INNER JOIN CONFIRMIT_COMMUNICATION CC ON CC.RESPONSEID = RD.RESPONSEID

答案 3 :(得分:0)

CASE expression有两种形式。第一个在CASE关键字之后立即采用参数,第二个不是。在第一种形式中,您无法与NULL进行比较,但您可以在第二种形式中进行比较。

,你可以做你想做的事
UPDATE CC
    SET Comm_Note = CASE WHEN DESC_REG IS NULL THEN COMM_NOTE ELSE rtrim(CONVERT(NVARCHAR(MAX),comm_note))+ 'Registration Issue: '+  LTRIM(DESC_REG) END
FROM 
    RAW_DATA RD
    INNER JOIN CONFIRMIT_COMMUNICATION CC ON CC.RESPONSEID = RD.RESPONSEID

但是,您可能应该使用WHERE子句:

UPDATE CC
    SET Comm_Note = rtrim(CONVERT(NVARCHAR(MAX),comm_note))+ 'Registration Issue: '+  LTRIM(DESC_REG)
FROM 
    RAW_DATA RD
    INNER JOIN CONFIRMIT_COMMUNICATION CC ON CC.RESPONSEID = RD.RESPONSEID
WHERE DESC_REG IS NOT NULL