2014-04-02 190 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