2014-04-02 141 views
0

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

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字段完全清空

help!

回答

0

还有two CASE expression formats

您使用的是简单CASE表达,对付你需要你的CASE表达更改为搜索CASE格式Null

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

简单的CASE表达式使用=运营商不能用于检查NULL值因为NULL在SQL Server中未定义。

+0

完美工作,谢谢! –

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 
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 
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