在单个查询中使用CASE更新SQL表中的多个列

时间:2019-02-06 11:15:45

标签: sql-server tsql case

我想编写一个更新查询,以将SQL表中的多列更新为BLANKS,无论它们的当前值为NULL

我写了一个类似下面的查询,但是它似乎没有正确更新所有适当的行,其中某些/所有这些列都具有NULL

Update A SET     
A.Col1 = CASE WHEN A.COl1 is NULL THEN ' ' END,     
A.Col2 = CASE WHEN A.COl2 is NULL THEN ' ' END,    
A.Col3 = CASE WHEN A.COl3 is NULL THEN ' ' END,    
A.Col4 = CASE WHEN A.COl4 is NULL THEN ' ' END    
FROM Table1 A 

上面的查询有什么问题吗?难道我们不能像上面那样使用CASE吗?

3 个答案:

答案 0 :(得分:3)

您可以简单地使用not key-compliantUILabel

示例

ISNULL

或者如果您仍然希望使用COALESCE,请在UPDATE YourTableName SET ColumnName1 = ISNULL(ColumnName1,' '), ColumnName2 = COALESCE(ColumnName2,' ') WHERE <Condition> 中指定列名,因为否则,所有非空字段的数据都将设置为CASE

ELSE

答案 1 :(得分:2)

我会做这样的事情:

UPDATE A SET 

A.Col1 = ISNULL(A.COl1, ' '),

A.Col2 = ISNULL(A.COl2, ' '),

A.Col3 = ISNULL(A.COl3, ' '),

A.Col4 = ISNULL(A.COl4, ' ')

FROM Table1 A

答案 2 :(得分:1)

您想要ELSE表达式中的CASE

Update A 
     SET A.Col1 = CASE WHEN A.COl1 is NULL THEN ' ' ELSE A.Col1 END,
         . . . 
FROM Table1 A; 

此外,您也可以使用NULL子句过滤WHERE值,以避免使用CASE表达式:

Update A 
     SET A.Col1 = ' ',
     . . . 
FROM Table1 A
WHERE A.Col1 IS NULL AND . . . ;