2017-05-16 30 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 
相關問題