SQL Server 2012 将数据类型 varchar 转换为数字时出错

Posted

技术标签:

【中文标题】SQL Server 2012 将数据类型 varchar 转换为数字时出错【英文标题】:SQL Server 2012 Error converting data type varchar to numeric 【发布时间】:2016-06-01 08:07:04 【问题描述】:

我有一个非常大的视图,它使用了许多表和其他视图。当我从这个大视图中选择 * 时,我得到一个错误

将数据类型 varchar 转换为数字时出错

问题是我不知道它到底发生在哪里。我是否必须深入研究所有涉及的对象,或者有办法知道问题到底出在哪里?

【问题讨论】:

必须有 UNIONJOINCASE 表达式导致该错误。不幸的是,你没有简单的方法来指出它。我建议您发布 VIEW 定义。 您可以编写视图并运行它吗?它可能会将您指向导致问题的代码行。不然能不能查看一下预估的执行计划?这个问题听起来像是在某个地方的连接,因为它试图将 varchar 与数字字段进行比较并尝试转换 varchar 并失败。 @RichBenner 我做到了,但它没有指向线,这让我觉得它在连接的对象之一中。 发布您在视图中使用的 SQL 按顺序删除你的连接,看看它什么时候开始工作,一旦你知道哪个子视图坏了,然后对那个视图做同样的事情,直到你找到答案。 【参考方案1】:

获取视图的定义,并将其制成 SELECT 语句。然后删除一半的列并运行它,继续删除列直到问题消失。如果它消失了,则将它们添加回来,直到找到问题为止。 如果它没有消失,则问题出在连接中。

【讨论】:

【参考方案2】:

也可以是这样的函数:

declare @pippo numeric
set @pippo=null
select ISNULL(@pippo, 'x')

这会引发同样的转换错误

希望有帮助

【讨论】:

以上是关于SQL Server 2012 将数据类型 varchar 转换为数字时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果

Sql Server:比较where子句中的varchar类型值不返回结果

处理 SQL Server 2012 表中的空间数据类型

SQL Server2012使用导入和导出向导时,用sql语句作为数据源,出现数据源类型会变成202或者203

在 ASP.Net 中使用 SQL Server 2012 地理数据类型 - DataReader.GetFieldType(x) 返回 null

Sql Server 2012 存储过程的调试