2012-03-15 65 views
3

我有一箇舊數據庫,其中有一個包含列的表(dataType REAL)和NaN(非數字)值。現在,如果我在這些表上查詢,那麼我得到的錯誤。因此,要更新這些我嘗試以下查詢:更新數據庫中的NaN值

UPDATE Table SET column = 0 WHERE IsNumeric(column)=0 

但即使是這種查詢失敗拋出錯誤

「返回列無效數據」。

如果該列的數據類型是varchar,那麼我可以輕鬆更新。但是列是REAL所以我無法更新表。幫助我我在這個問題上堅持了兩天。

+0

[將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

+0

或者這:http://stackoverflow.com/questions/450618/nan-values-in-a-float-field-in-mssql-database – 2012-03-15 08:32:38

+0

@Joey我看着,但在那個鏈接中,列的數據類型是varchar。這不是我的情況。 – Amarnath 2012-03-15 08:46:36

回答

3

我得到的解決方案,通過將該列的值轉換爲字符串,然後我能夠更新它。

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)

+0

有趣的是,您的新服務器比舊服務器舊。 – 2012-03-16 08:39:31

1

根據您進入這種情況的具體情況(數據庫版本和修補程序),數據庫中發出的以下語句可能會對您有所幫助。

DBCC CHECKDB WITH DATA_PURITY 

如果這沒有幫助,滴在列的所有索引和約束,並再次發出

UPDATE Table SET column = 0 WHERE IsNumeric(column)=0 

。然後重新創建索引或約束。

+0

這是我需要遷移到新數據庫的舊數據庫。第一個「DBCC CHECKDB WITH DATA_PURITY」不起作用。即使它已拋出錯誤並終止於有NaN值的列。 – Amarnath 2012-03-15 10:38:32

+0

請發送舊數據庫服務器和新數據庫服務器的輸出「SELECT @@ VERSION」,以及'DBCC'的錯誤消息。 – 2012-03-15 11:03:26

+0

或者,在你的危險中,進入單用戶模式並用data_purity發出'dbcc checkdb(0,repair_allow_data_loss)' – 2012-03-15 11:03:51