我在将数据迁移到新的sql server数据库时犯了一个错误:几乎每个应为null的记录现在都有一个'null'字符串值。
是否有一种相当快速的方法来更新整个数据库并用真正的null替换每个'null'记录?
我正在尝试这样的事情:
SELECT ' update ' + TABLE_SCHEMA + '.' + TABLE_NAME + 'set value = null
where value = 'NULL''
FROM INFORMATION_SCHEMA.TABLES
但是我正在寻找关于如何迭代每个表中每列的一些建议。
答案 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