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 转换为数字时出错
问题是我不知道它到底发生在哪里。我是否必须深入研究所有涉及的对象,或者有办法知道问题到底出在哪里?
【问题讨论】:
必须有UNION
、JOIN
或 CASE
表达式导致该错误。不幸的是,你没有简单的方法来指出它。我建议您发布 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 Server2012使用导入和导出向导时,用sql语句作为数据源,出现数据源类型会变成202或者203
在 ASP.Net 中使用 SQL Server 2012 地理数据类型 - DataReader.GetFieldType(x) 返回 null