我被分配了一个调试现有ASP.NET C#系统的任务。我发现这是由存储过程引起的,错误消息是
Msg 8114,Level 16,State 5 将数据类型varchar转换为real。时出错。
没有行号或任何错误描述。任何形式的抬头都表示赞赏。我应该在哪里查看,如何调试以便找到确切的错误。请帮忙。
答案 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代码。
您可以开始调试,调试 - >开始调试或使用图片中显示的图标,甚至使用键盘快捷键Alt + F5。
我建议在不同的查询窗口中编写execute语句,必要时使用参数,不要忘记添加db调用并调试此窗口。
$permission === 1 ? true: false
您可以进入(F11)和跳过(F10)。调试停止或崩溃的地方是您需要查看的地方。一旦使用键盘快捷键F9开始调试,您甚至可以设置制动点。 For more look at this video.