我有一个旧数据库,其中有一个包含 NaN(非数字)值的列( dataType REAL )的表。现在,如果我查询这些表,那么我会收到错误。所以为了更新这些,我尝试了以下查询:
UPDATE Table SET column = 0 WHERE IsNumeric(column)=0
但即使是这个查询也无法抛出错误
“为列”返回了无效数据。
如果列的数据类型是varchar,那么我可以轻松更新。但是Column REAL 所以我无法更新表。帮助我,我真的被这个问题困住了两天。
答案 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
一次。然后重新创建索引或约束。