打破WHILE,然后返回存储过程中的最后一个位置 - SQL Server

时间:2012-04-19 06:40:22

标签: sql sql-server sql-server-2008 tsql sql-server-2005

例如我有
//这只是一个虚拟的示例代码。

WHILE
  BEGIN

     Statement 1
     GOTO RESET
     Statement 2
     GOTO RESET
     Statement 3
     GOTO RESET
  END

RESET:
SET @Var = 1 
// At this point, I need to come back my last position in the WHILE LOOP

我的问题是
1。可能吗?
2。如果是的话,我该怎么做?
非常感谢

3 个答案:

答案 0 :(得分:2)

您可以使用GOTO语法。您为Label定义,然后为GOTO定义该标签。像这样:

DECLARE @test INT=1

SomeName:
    print 'test'

IF @test=1
BEGIN
    SET @test=2
    GOTO SomeName
END

这将PRINT 'test'两次

参考here

答案 1 :(得分:0)

SQL支持GOTO / LABELhttp://msdn.microsoft.com/en-us/library/ms180188.aspx

不完全确定为什么在存储过程中需要这种精细的流量控制。也许尝试将存储过程拆分为不同的过程?

答案 2 :(得分:0)

您可以使用TRY...CATCH块。

DECLARE @i int

SET @i = 1

WHILE @i <= 5
BEGIN
    BEGIN TRY
        IF @i = 3 RAISERROR('Three is an incorrect value', 11, 1)

        PRINT 'Ok'
    END TRY
    BEGIN CATCH
        PRINT 'Error'
    END CATCH

    SET @i = @i + 1
END