如何解释SQL Server错误?

时间:2018-12-31 09:31:17

标签: sql-server

每当我在SQL Server查询中出现语法错误时,都会收到一条错误消息,并且很难解释。例如,我现在遇到的错误是

  

信息102,级别15,状态1,过程myQuery,第3行[批处理开始第57行]
  '!'附近的语法不正确。

我使用table!column代替了table.column。我已解决此问题,因为我了解这一点:

  

'!'附近的语法不正确

但是,我不明白如何解释此消息

  

信息102,级别15,状态1,过程myQuery,第3行[Batch Start Line 57]

人们通常只是忽略那一部分吗?我一直很好地相处,而没有非常注意它。但是能够理解错误消息可能有助于准确地定位错误所在。

编辑:

我不知道Msg,级别,状态,批处理和起始行的含义

Edit2:

除了接受的答案this链接之外,还帮助我消除了对行号含义的误解。我一直以为行号是指SQL查询中错误所在的行,这使我感到困惑。原来行号是查询窗口中的行。要在查询编辑器窗口中启用行号,请转到:

工具>选项>文本编辑器> Transact-SQL>常规>行号

按“确定”

2 个答案:

答案 0 :(得分:6)

来自Understanding Database Engine Errors

  

Microsoft SQL Server数据库引擎引发的错误具有(以下)属性:

  • 错误号
    每个错误消息都有一个唯一的错误号。
  • 错误消息字符串
    错误消息包含有关错误原因的诊断信息。许多 错误消息具有替换变量,其中包含信息,例如名称 会插入产生错误的对象。
  • 严重程度 严重程度指示错误的严重程度。严重性较低的错误,例如 为1或2,是信息消息或低级别警告。错误率高 严重性表明应该尽快解决的问题。

  • 可以在数据库的代码中的多个点处引发一些错误消息 发动机。例如对于几个不同的条件可能会引发1105错误。 每个引发错误的特定条件都分配一个唯一的状态码。

    当您查看包含有关已知问题信息的数据库时,例如 Microsoft知识库中,您可以使用状态号来确定是否 记录的问题与您遇到的错误相同。 [...]

  • 程序名称
    是发生错误的存储过程或触发器的名称。
  • 行号
    指示在批处理,存储过程,触发器或函数中生成了哪个语句 错误。

具体来说,[Batch Start Line 57]意味着您正在运行一个具有多个批处理的脚本-(如果在SSMS中,则这些批处理由GO关键字分隔)-因此错误出现在脚本的第三行从脚本的第57行开始的批处理。

这是您已张贴到其部分的错误消息的细分:

错误号

  

消息102,

严重程度

  

15级,

  

状态1

过程

  

过程myQuery

行号

  

第3行[Batch Start Line 57]

错误消息字符串

  

'!'附近的语法不正确。

答案 1 :(得分:0)

不幸的是,这对我没有用。我使用最新版本的SSMS或SQL Server Management Studio。我有一个SQL脚本(在查询编辑器中),其中包含约100行代码。这是我在查询中遇到的错误:

Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'abcd' to data type int.

该错误消息不正确或仅具有误导性。查询编辑器中第70行的实际错误!当我单击错误消息时,将我带到第2行,这只是一个简单的选择顶部1。Google搜索显示该错误与String串联有关,但是我的sql代码中没有串联。

幸运的是,我记得在忘记将数字(在varchar列中)括在单引号中之前遇到过这种错误。因此,当涉及到调试错误时,SSMS似乎毫无用处。