THROW vs. RAISERROR

Ada*_*dam 11 sql-server sql-server-2008-r2

我正在尝试执行以下代码:

THROW 51051, 'I come from the THROW construct :)', 1 ;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Could not find stored procedure 'THROW'.
Run Code Online (Sandbox Code Playgroud)

这个THROW程序不是一个系统程序吗?为什么不能找到它?

另外,unsing THROWErrorState?之间的区别是什么?是一个比另一个更老/更新/更好?"ErrorSeverity"和"ErrorState"是ErrorState什么意思?我可以按照自己的意愿定义它们,还是预定义它们?

Edu*_*omo 10

阅读以下内容:Sql Server中RAISERROR和THROW之间的差异


无论RAISERRORTHROW语句用于提高错误Sql Server中.RAISERROR的旅程从Sql Server 7.0开始,其中THROW语句的旅程刚刚从Sql Server 2012开始.显然,微软建议我们开始使用THROW语句而不是RAISERROR.THROW声明似乎比RAISERROR简单易用.

  • 我注意到“RAISERROR('message text', 2, 1)WITH NOWAIT;”对于向客户端输出消息而不实际引发错误仍然有用,因此“RAISERROR”**可以**用于非错误条件,而 `THROW` 则不能。 (5认同)
  • 每个对此感到好奇的人都应该阅读该链接。我认为批次处理方式之间的差异是一个特别重要的“陷阱”。 (2认同)

pod*_*ska 6

是的,它是,但仅限2012年.如果您使用的是2008R2,那么它就不存在了.

raiserror文档中清楚地记录了状态和严重性的定义