我试图对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字段置空
帮助!
答案 0 :(得分:0)
您正在使用简单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