我想使用一个查询为表的所有列更新null到非null列。 就像我的列“int”有null然后它将为0而“string”将为“”。
是否可以使用单个SQL查询?
我不想为update执行单独的查询并且设置为not null,因为我有很多表并且有很多列。
提前致谢。
答案 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)