调试并查找错误"将数据类型varchar转换为实数"

时间:2016-08-04 11:21:36

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

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

  

Msg 8114,Level 16,State 5   将数据类型varchar转换为real。时出错。

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

3 个答案:

答案 0 :(得分:3)

评论太长了。

问题很明显 - 你有一个字符串,你将它视为一个数字。有三个可能的原因。

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

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

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

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

答案 1 :(得分:2)

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

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

希望这有帮助

答案 2 :(得分:0)

如果您有Microsoft SQL Management Studio,则可以像在Visual Studio中一样调试SQL代码。

enter image description here

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

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

 $permission === 1 ? true: false

您可以进入(F11)和跳过(F10)。调试停止或崩溃的地方是您需要查看的地方。一旦使用键盘快捷键F9开始调试,您甚至可以设置制动点。 For more look at this video.