【问题标题】:THROW vs. RAISERROR投掷与 RAISERROR
【发布时间】:2014-06-10 13:08:55
【问题描述】:

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

THROW 51051, 'I come from the THROW construct :)', 1 ;

我得到的错误是:

Could not find stored procedure 'THROW'.

THROW 过程不是系统过程吗?为什么找不到呢?

此外,unsing THROWErrorState 有什么区别?一个比另一个旧/新/更好吗? ErrorState 中的“ErrorSeverity”和“ErrorState”是什么意思?我可以随意定义它们还是预定义它们?

【问题讨论】:

  • 您使用的是哪个版本?您已经标记了 2008 年和 2012 年。
  • @Rahul:我们使用的是 2008 R2
  • 这就是为什么您会收到该错误,因为THROW 从 SQL2012 开始可用。

标签: sql-server sql-server-2008-r2


【解决方案1】:

根据Differences Between RAISERROR and THROW in Sql Server

RAISERRORTHROW 语句都用于在 Sql Server 中引发错误。

RAISERROR的旅程从Sql Server 7.0开始;而THROW 语句的旅程才刚刚从 Sql Server 2012 开始。

Microsoft 建议我们开始使用 THROW 语句而不是 RAISERRORTHROW 语句似乎比RAISERROR 更简单易用。

【讨论】:

  • 事实上 - RAISERROR can’t be used in the Sql Server 2014’s Natively compiled Stored Procedures。所以这一切似乎都在朝着使用更多THROW的方向发展
  • 对此感兴趣的每个人都应该阅读该链接。我认为批次处理方式之间的差异是一个特别重要的“问题”。
  • 我注意到 RAISERROR( 'message text', 2, 1 ) WITH NOWAIT; 在不实际引发错误的情况下向客户端输出消息仍然很有用,因此 RAISERROR 可以用于非错误条件,而THROW 不能。
【解决方案2】:

是的,但是only since 2012。如果您使用的是 2008R2,则它不存在。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2014-02-19
    • 2014-04-27
    • 2018-11-28
    • 2018-12-10
    相关资源
    最近更新 更多