2017-05-16 29 views
1

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

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

我的东西想是这样的:

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

但是我正在寻找如何在每个表中的每一列重复一些建议。

+1

如果这是一个新的数据库,它可能会更容易简单地删除数据库并导入新鲜,固定过程当然。这当然是在你的测试系统上? –

+0

可能的重复http://stackoverflow.com/questions/25780297/how-to-update-all-tables-with-a-particular-column-name –

+0

@PrabhatG这是用sql server标记的。你建议的副本是postgre,它们不是一回事。 –

回答

3

您可以使用查询为您创建sql。像这样的东西。如果你需要处理文本和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 
) 
+0

从这个问题获得灵感http://stackoverflow.com/questions/25780297/how-to-update-all-tables-with -a-particular-column-name我想出了这个:'SELECT'update'+ table_schema +'。' + table_name +'set'+ COLUMN_NAME +'= null其中'+ COLUMN_NAME +'=''NULL''' FROM(选择 table_schema,table_name,COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where DATA_TYPE ='varchar')c'你的答案有什么不同吗? – Argentina

+1

@阿根廷它只会更新varchar列,而不是char,nchar和nvarchar列。 INFORMATION_SCHEMA.COLUMNS中还包含视图。 – Peter

+1

除了您的代码只会更新varchar的区别之外,您可能会或可能不会使模式正确。 INFORMATION_SCHEMA视图并不总是可靠的。请注意,即使文档建议您不要使用它。 https://docs.microsoft.com/en-us/sql/relational-databases/system-information-schema-views/columns-transact-sql –

1

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

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 
相关问题