更新DataBase中的NaN值

时间:2012-03-15 08:06:54

标签: sql-server sql-server-2008

我有一个旧数据库,其中有一个包含 NaN(非数字)值的列( dataType REAL )的表。现在,如果我查询这些表,那么我会收到错误。所以为了更新这些,我尝试了以下查询:

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

但即使是这个查询也无法抛出错误

  

“为列”返回了无效数据。

如果列的数据类型是varchar,那么我可以轻松更新。但是Column REAL 所以我无法更新表。帮助我,我真的被这个问题困住了两天。

2 个答案:

答案 0 :(得分:3)

我得到了解决方案,通过将该列的值转换为字符串然后我可以更新它。

UPDATE Table
SET Column = CASE
               when charindex('NaN', UPPER(Column)) > 0 then 0
               ELSE Column
             END 

在这里,我正在寻找'NaN'的charindex,因为当我做CONVERT(varchar(1000),Column)时,该列中的数据NaN变为-#@NaN。 所以我在转换为字符串后在该列中寻找该值。希望这对其他人有帮助。

抱歉,我没有旧的服务器版本。我只是备份。

新服务器版本:Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(Intel X86)2010年4月2日15:53:02版权所有(c)Windows NT 6.1上的Microsoft Corporation Enterprise Edition (Build 7601:Service Pack 1)

答案 1 :(得分:1)

根据您遇到这种情况的确切方式(数据库版本和修补程序),数据库中发布的以下语句可能会对您有所帮助。

DBCC CHECKDB WITH DATA_PURITY

如果这没有帮助,请删除列上的所有索引和约束并发出

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

一次。然后重新创建索引或约束。