更新所有表列中的非空值

时间:2016-08-16 07:05:54

标签: sql sql-server-2012

我想使用一个查询为表的所有列更新null到非null列。 就像我的列“int”有null然后它将为0而“string”将为“”。

是否可以使用单个SQL查询?

我不想为update执行单独的查询并且设置为not null,因为我有很多表并且有很多列。

提前致谢。

2 个答案:

答案 0 :(得分:2)

没有魔术快捷方式 - 您需要为每个表使用UPDATE命令,并且需要列出要单独更新的每个列:

UPDATE dbo.YourTable
SET IntColumn = ISNULL(IntColumn, 0),
    VarCharColumn = ISNULL(VarCharColumn, "")

依旧......

答案 1 :(得分:0)

sql server没有真正的快捷方式来执行此操作,但是您可以使用脏方式,使用它时需要小心。

declare @tableName varchar(200) = 'TABEL1'
declare @query1 varchar(max) = ''

select @query1 = @query1 + (case when @query1 = '' then '' else ', ' end) 
    + a.name +' = isnull('+a.name+','+  (case when a.system_type_id in (56) then '0' when a.system_type_id in (167) then '''''' else a.name  END) +')'
from sys.all_columns a
inner join sys.all_objects b
    on a.object_id = b.object_id
where b.name = @tableName

set @query1 = ' UPDATE '+ @tableName +' SET '+ @query1

execute(@query1)