Sql Server:更新数据库中的每个'null'字符串记录

时间:2017-05-16 13:49:16

标签: sql-server null

我在将数据迁移到新的sql server数据库时犯了一个错误:几乎每个应为null的记录现在都有一个'null'字符串值。

是否有一种相当快速的方法来更新整个数据库并用真正的null替换每个'null'记录?

我正在尝试这样的事情:

 SELECT ' update ' + TABLE_SCHEMA + '.' + TABLE_NAME + 'set value = null 
 where value = 'NULL''
 FROM INFORMATION_SCHEMA.TABLES 

但是我正在寻找关于如何迭代每个表中每列的一些建议。

2 个答案:

答案 0 :(得分:3)

您可以使用查询为您创建SQL。像这样的东西。如果需要处理text和ntext,则必须在sys.types中查找其type_id值。我没有包含它们,因为它们应该首先被使用。

select 'update ' + QUOTENAME(s.name) + '.' + quotename(t.name) + 
    ' set ' + QUOTENAME(c.name) + ' = NULL where '
    + QUOTENAME(c.name) + ' = ''NULL'''
from sys.tables t
join sys.columns c on c.object_id = t.object_id
join sys.schemas s on s.schema_id = t.schema_id
where c.system_type_id in
(
    167 --varchar
    , 175 --char
    , 231 --nvarchar
    , 239 --nchar
)

答案 1 :(得分:1)

您可以在夜间运行以下查询。它将为每个字符串类型列创建一个update语句,而不是执行所有语句。

declare @sql nvarchar(max) = ''

select @sql = @sql + 'update '+ t.name + ' set '+ c.name + ' = null where '+ c.name + '=''null''' +char(13) + char(10)
from sys.tables t
join sys.columns c on t.object_id = c.object_id
join sys.types ty on c.system_type_id = ty.system_type_id
where ty.name like '%char'

exec sp_executesql @sql