【问题标题】:How to interpret this SQL Server error message如何解释此 SQL Server 错误消息
【发布时间】:2016-12-15 13:29:13
【问题描述】:

我正在从 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 是什么意思?
谢谢!


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

【问题讨论】:

  • 我不确定您是否试图找出错误发生的原因,或者您是否清楚这一点并且您只需要有关消息及其上下文的帮助。如果它的错误可能是您传递给存储过程的参数值,您可以检查该值吗?
  • @Igor 未提供参数。我知道问题出在屏幕截图中从第 97 行开始的 INSERTstatement 中,但我会发现清楚地解释这些错误消息对我自己和其他人很有用。
  • 使用print,您可以将各种消息写入输出。在此之前是否有任何内容会打印一条自定义消息,如果出现错误,稍后会显示该消息,并使其看起来像是错误的一部分而不是错误的一部分?
  • @Igor 我就是这么做的。我就是这样知道它在哪里坠毁的。

标签: sql-server ssms


【解决方案1】:

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

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

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

【讨论】:

  • 我刚测试过,Batch Start Line 2其实就是说你在第2行有个“GO”命令,所以当前的batch从第2行开始。
【解决方案2】:

关于Line n

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

示例 1

假设点击SSMS中的New Query按钮后下一个是SQLQuery窗口

1. Create proc spTest1

2. As

3. Begin

4. Select 1/0

5. End

执行spTest1后会收到下一条消息

消息 8134,级别 16,状态 1,过程 spTest1,第 4 行

示例 2

假设点击SSMS中的New Query按钮后下一个是SQLQuery窗口

1. 

2.

3.

4.

5.

6. Create proc spTest2

7. As

8. Begin

9. Select 1/0

10. End

执行spTest2后会收到下一条消息

消息 8134,级别 16,状态 1,过程 spTest2,第 9 行

结论如何得到准确的数字

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

Exec sp_helptext spName

【讨论】:

  • 当使用 Alter 命令查看过程时,您需要查看过程本身的代码,而不是 SQL Server 为允许您编辑过程而放置的额外部分
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2011-02-02
  • 2020-06-13
  • 2014-12-24
相关资源
最近更新 更多