如何解释此 SQL 服务器错误消息

How to interpret this SQL Server error message

我正在从 SSMS 执行存储过程,但收到此错误消息:

Msg 295, Level 16, State 3, Procedure spEdiCreateOrders, Line 80 [Batch Start Line 2]
Conversion failed when converting character string to smalldatetime data type.

当然我可以试错,但我希望能够利用这个消息,我对这个消息有点困惑。
'line 80':从哪里开始?来自 Alter procedureBEGIN 子句?或者它真的指的是我点击 Modify 时看到的第 80 行?
另外,Batch Start Line 2 是什么意思?
谢谢!


edit:请注意,我对帮助解决问题不感兴趣(它已经解决了)。我只是想要一个关于如何解释 'line 80' 和 'Batch Start Line 2' 的明确指南,以便下次我立即知道去哪里看。

关于Line n

N它是指对象的行数,考虑到它里面或者它的主体之前的任何空格。

示例 1

假设在 SSMS

中单击 New Query 按钮后,下一个是 SQLQuery window
1. Create proc spTest1

2. As

3. Begin

4. Select 1/0

5. End

执行spTest1后,您将收到下一条消息

Msg 8134, Level 16, State 1, Procedure spTest1, Line 4

示例 2

假设在 SSMS

中单击 New Query 按钮后,下一个是 SQLQuery window
1. 

2.

3.

4.

5.

6. Create proc spTest2

7. As

8. Begin

9. Select 1/0

10. End

执行spTest2后,您将收到下一条消息

Msg 8134, Level 16, State 1, Procedure spTest2, Line 9

结论如何得到准确的数字

要获得准确的数字,请使用系统存储过程 sp_helptext 作为下一个

Exec sp_helptext spName

使用 Alter 过程 查看存储过程的代码时,错误行来自 BEGIN 命令,因为错误发生在过程中,而不是 改变过程命令

  • 开始 = 第 0 行
  • 下一行(程序的实际开始 = 1

批处理行 2 表示第二批语句 - 这意味着您在过程中某处有一个 GO,这是在第二组语句 (http://sqlhints.com/tag/examples-of-sql-go-statement/) 中,第一组出现在 GO

之前