我有一箇舊數據庫,其中有一個包含列的表(dataType REAL)和NaN(非數字)值。現在,如果我在這些表上查詢,那麼我得到的錯誤。因此,要更新這些我嘗試以下查詢:更新數據庫中的NaN值
UPDATE Table SET column = 0 WHERE IsNumeric(column)=0
但即使是這種查詢失敗拋出錯誤
「返回列無效數據」。
如果該列的數據類型是varchar,那麼我可以輕鬆更新。但是列是REAL所以我無法更新表。幫助我我在這個問題上堅持了兩天。
我有一箇舊數據庫,其中有一個包含列的表(dataType REAL)和NaN(非數字)值。現在,如果我在這些表上查詢,那麼我得到的錯誤。因此,要更新這些我嘗試以下查詢:更新數據庫中的NaN值
UPDATE Table SET column = 0 WHERE IsNumeric(column)=0
但即使是這種查詢失敗拋出錯誤
「返回列無效數據」。
如果該列的數據類型是varchar,那麼我可以輕鬆更新。但是列是REAL所以我無法更新表。幫助我我在這個問題上堅持了兩天。
我得到的解決方案,通過將該列的值轉換爲字符串,然後我能夠更新它。
UPDATE Table
SET Column = CASE
when charindex('NaN', UPPER(Column)) > 0 then 0
ELSE Column
END
在這裏,我要尋找 '男' 的CHARINDEX因爲當我CONVERT(VARCHAR(1000),列)該列中的數據爲NaN成爲-#@NaN
。 所以我在轉換爲字符串後在該列中查找該值。希望這有助於其他人。
對不起,我沒有舊的服務器版本。我只是有它的備份。微軟SQL Server 2008 R2(RTM) - 10.50.1600.1(Intel X86)2010年4月2日15:53:02 Copyright(c)Windows NT 6.1上的微軟公司企業版(Build 7601: Service Pack 1)
有趣的是,您的新服務器比舊服務器舊。 – 2012-03-16 08:39:31
根據您進入這種情況的具體情況(數據庫版本和修補程序),數據庫中發出的以下語句可能會對您有所幫助。
DBCC CHECKDB WITH DATA_PURITY
如果這沒有幫助,滴在列的所有索引和約束,並再次發出
UPDATE Table SET column = 0 WHERE IsNumeric(column)=0
。然後重新創建索引或約束。
這是我需要遷移到新數據庫的舊數據庫。第一個「DBCC CHECKDB WITH DATA_PURITY」不起作用。即使它已拋出錯誤並終止於有NaN值的列。 – Amarnath 2012-03-15 10:38:32
請發送舊數據庫服務器和新數據庫服務器的輸出「SELECT @@ VERSION」,以及'DBCC'的錯誤消息。 – 2012-03-15 11:03:26
或者,在你的危險中,進入單用戶模式並用data_purity發出'dbcc checkdb(0,repair_allow_data_loss)' – 2012-03-15 11:03:51
[將NaN值轉換爲NULL或SQL中的NaN爲0]的可能重複(http://stackoverflow.com/questions/5237784/convert-nan-values-to-null-or-nan到0-in-sql) – Joey 2012-03-15 08:08:41
或者這:http://stackoverflow.com/questions/450618/nan-values-in-a-float-field-in-mssql-database – 2012-03-15 08:32:38
@Joey我看着,但在那個鏈接中,列的數據類型是varchar。這不是我的情況。 – Amarnath 2012-03-15 08:46:36