在Microsoft SQL Server中运行过程时,我经常会收到如下错误消息:
Msg 8114,Level 16,State 5,Procedure XYZ,LineAss 88[Batch Start Line 2]
但是,LineAss 88
中指定的第88行实际上不会包含任何与错误相关的代码。此外,通常也不清楚Batch Line Start #
指的是什么。
在调试失败的过程时,您使用什么基于批次和行号的方法来实际识别出问题所在的特定代码?
我花了一段时间才完全理解你的问题。错误消息中提到的行号没有指向发生错误的确切行。它指向发生错误的语句。另一件需要注意的事情是,在存储过程中,如果查询的开头有空行,它们将被添加到行计数中。这有时也会抛出您在错误消息中看到的行号。
我还发现了一本关于这个主题的有趣读物:
http://tomaslind.net/2013/10/15/line-numbers-in-t-sql-error-messages/
这应该能够澄清你的大部分疑虑。如果你需要进一步澄清,请告诉我。
Do"改变定义";。
它似乎是从存储过程中的GO
行开始的,它将其视为零行。
例如,我得到一个错误:
Msg 1205,Level 13,State 78,Procedure dbo.xxx,Line 678[Batch Start Line 2]
GO
在第7行,当我追踪到它时,它在文件中的第600行。