首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server 2000:如何退出存储过程?

SQL Server 2000:如何退出存储过程?
EN

Stack Overflow用户
提问于 2009-12-08 05:03:02
回答 7查看 163.1K关注 0票数 71

如何在存储过程中途退出?

我有一个存储过程,我想在其中提早退出(同时尝试对其进行调试)。我尝试调用RETURNRAISERROR,但sp仍在运行:

代码语言:javascript
复制
CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS

    print 'before raiserror'
    raiserror('this is a raised error', 18, 1)
    print 'before return'
    return -1
    print 'after return'

[snip]

我知道它一直在运行,因为我在下面遇到了一个错误。我没有看到任何我的指纹。如果我注释掉存储过程的大部分:

代码语言:javascript
复制
CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS

    print 'before raiserror'
    raiserror('this is a raised error', 18, 1)
    print 'before return'
    return -1
    print 'after return'

   /*
     [snip]
   */

然后我没有得到我的错误,我看到了结果:

代码语言:javascript
复制
before raiserror
Server: Msg 50000, Level 18, State 1, Procedure Archive_Session, Line 5
this is a raised error
before return

所以问题是:如何从SQL Server中的存储过程中解脱出来?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-12-08 05:13:17

您可以使用RETURN立即停止执行存储过程。引用自Books Online

从查询或过程中无条件退出。返回是立即和完整的,并且可以在任何时候用于退出过程、批处理或语句块。不执行RETURN后面的语句。

出于偏执,我尝试了你的例子,它确实输出了打印结果,并立即停止执行。

票数 95
EN

Stack Overflow用户

发布于 2009-12-08 05:10:29

除非将严重性指定为20或更高,否则raiserror不会停止执行。请参阅MSDN documentation

通常的解决方法是在每个raiserror后面都包含一个return

代码语言:javascript
复制
if @whoops = 1
    begin
    raiserror('Whoops!', 18, 1)
    return -1
    end
票数 30
EN

Stack Overflow用户

发布于 2009-12-08 05:10:08

将其放入TRY/CATCH中。

当RAISERROR在TRY块中以11或更高的严重性运行时,它会将控制转移到关联的CATCH块

参考:MSDN

MSSQL:这适用于 2005+,但我看到您现在已经澄清了您正在使用MSSQL2000。我把这个留在这里作为参考。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1862871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档