【问题标题】:Updating the NaN value in a DataBase更新数据库中的 NaN 值
【发布时间】:2012-08-04 10:31:39
【问题描述】:

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

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

但即使是这个查询也失败了,抛出错误

“为列“返回无效数据。

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

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案1】:

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

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) Apr 2 2010 15:53:02 版权所有 (c) Microsoft Corporation Enterprise Edition on Windows NT 6.1 (内部版本 7601:Service Pack 1)

【讨论】:

  • 有趣的是,您的新服务器比旧服务器旧。
【解决方案2】:

根据您遇到这种情况的具体情况(数据库版本和修补程序),在您的数据库中发布的以下声明可能会对您有所帮助。

DBCC CHECKDB WITH DATA_PURITY

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

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

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

【讨论】:

  • 这是一个旧数据库,我需要从中迁移到新数据库。第一个“DBCC CHECKDB WITH DATA_PURITY”不起作用。甚至它已经抛出错误并在存在 NaN 值的列处终止。
  • 请将新旧数据库服务器的输出SELECT @@VERSION,以及来自DBCC的错误信息发送出去。
  • 或者,后果自负,进入单用户模式并发出dbcc checkdb (0, repair_allow_data_loss) with data_purity
  • 我得到了解决方案,通过将该列的值转换为字符串然后我可以更新它。 UPDATE Table SET Column = CASE when charindex('NaN', UPPER(Column)) > 0 then 0 ELSE Column END 在这里,我正在寻找 'NaN' 的 charindex,因为当我执行 CONVERT(varchar(1000), Column)该列中的数据 NaN 变为 -#@NaN。所以我在转换为字符串后在该列中寻找该值。希望这对其他人有所帮助。
  • @Amarnath - 感谢您的评论。为了他人的利益,您可能希望将其重新设计为单独的答案。如果您知道,您的(旧的和新的)服务器版本信息可能仍然会增加相当大的价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2013-03-12
  • 2021-07-06
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多