我有100列的表格。这里最多50到60列包含NULL值。现在我需要在所有50到60列中将此NULL值替换为0。我尝试使用Update查询,
UPDATE [tableName]
SET col1=0, col2 = 0, ... col60 = 0
WHERE col1 IS NULL AND Col2 IS NULL ... Col60 IS NULL
是否有任何其他查询更新这些全部60列而不指定此类列或我们有任何其他方法???
答案 0 :(得分:3)
您必须指定所有列,但是您可以跳过WHERE子句并一次更新一次:
UPDATE [tableName] SET
col1=COALESCE(col1, 0),
col2=COALESCE(col2, 0),
col3=COALESCE(col3, 0),
col4=COALESCE(col4, 0),
[...]
答案 1 :(得分:0)
如果列中的每个值都为NULL,则可以尝试此解决方法:
它不是很优雅但是有效
答案 2 :(得分:0)
我认为没有其他选择 - 但您发布的查询只会更新所有列都为空的记录。
如果您想更新单个列,则需要将其分解为单独的更新:
update table
set col1 = 0
where col 1 is null
update table
set col2 = 0
where col2 is null
答案 3 :(得分:0)
要不手动编写此查询,可以使用动态SQL生成:
DECLARE @Table NVARCHAR(255)= 'Your table'
DECLARE @sSQl NVARCHAR(MAX)= 'UPDATE ' + @Table + ' SET ' + CHAR(13) ;
WITH c AS ( SELECT c.name
FROM sys.all_columns c
JOIN sys.tables T ON c.object_id = T.object_id
WHERE t.name = @Table
)
SELECT @sSQl = @sSQl + c.name + '=ISNULL(' + c.name + ',0)' + ','
+ CHAR(13)
FROM c
IF LEN(@sSQl) > 0
SET @ssql = LEFT(@sSQl, LEN(@sSQl) - 2)
PRINT @ssql