【问题标题】:Debug and find error "Error converting data type varchar to real"调试并发现错误“将数据类型 varchar 转换为实数时出错”
【发布时间】:2016-12-10 11:55:42
【问题描述】:

我被分配了一项任务来调试现有的 ASP.NET C# 系统。我发现这是由存储过程引起的,错误信息是

消息 8114,级别 16,状态 5
将数据类型 varchar 转换为 real 时出错。

没有行号或任何错误描述。任何形式的抬头都是值得赞赏的。我应该在哪里查看,如何调试以便找到确切的错误。请帮忙。

【问题讨论】:

  • 看起来像过程中的 sql 问题。查看查询并找到varchar 类型的列以number 类型执行操作。它可能也是条件或与字符串和数字连接的地方,您必须寻找它。

标签: sql asp.net sql-server stored-procedures


【解决方案1】:

评论太长了。

问题很明显——你有一个字符串,你把它当作一个数字。有三个可能的原因。

第一种是显式转换,将字符串转换为数字。这应该很容易找到。您可以在 SQL Server 2012+ 中将显式转换替换为 try_convert()

第二个难度不大。 + 运算符用于加法和字符串连接。它通常会导致此类问题。所有数字参数都需要转换为字符串。或者,将所有进行连接的代码更改为使用CONCAT() 函数——参数会自动转换为字符串。

第三个是数值运算的隐式转换。如果您有任何其他需要数值的操作(或函数调用),则 SQL Server 会将值隐式转换为数字。这可能很难找到。尝试编写不依赖隐式转换的代码。

注意:尝试使用 WHERE 子句(即使在子查询或 CTE 中)过滤掉错误值是行不通的。如果你有

【讨论】:

    【解决方案2】:

    如果你有 Microsoft SQL Management Studio,你可以像在 Visual Studio 中那样简单地调试你的 sql 代码。

    您可以开始调试,Debug -> Start Debugging 或使用图片中显示的图标,甚至使用键盘快捷键 Alt + F5。

    我建议在不同的查询窗口中编写执行语句,如有必要,请使用参数,不要忘记添加您的 db 调用并调试此窗口。

    use yourdb
    exec yoursp para1 para2
    

    您可以单步执行 (F11) 和单步执行 (F10)。调试停止或崩溃的地方是您必须查看的地方。一旦开始使用键盘快捷键 F9 进行调试,您甚至可以设置刹车点。 For more look at this video.

    【讨论】:

      【解决方案3】:

      发现错误,分享我的答案,希望有人面临同样的问题。这就是错误所在

      CASE [Category].[ID]
          WHEN '1' THEN [Category].[Name]
          WHEN '2' THEN [Category].[Weight]
      END
      

      这里[Category].[Name] 是字符串,[Category].[Weight] 是真实的,在同一个CASE 子句中尝试不同的数据类型,所以要解决这个问题,我要做的就是拆分这个条件,像这样

      CASE [Category].[ID]
          WHEN '1' THEN [Category].[Name]
          END,
      CASE [Category].[ID]
          WHEN '2' THEN [Category].[Weight]
      END
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2011-03-29
        • 2012-06-05
        • 1970-01-01
        相关资源
        最近更新 更多