2012-04-19 5 views
0

たとえば、私は
を持っています//これは単なるダミーのサンプルコードです。WHILEを中断して、ストアドプロシージャの最後の位置に戻る - SQL Server

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.はいの場合、どうすればいいですか?

+0

'WHILE'と' GOTO'はT-SQLコードでは非リレーショナルで遅いので避けるべきです。代わりにセットベースの操作を使用してください。 –

+0

@AnthonyFaull常に例外がありますが、時にはwhileとgotoを使用する必要があります。 –

答えて

0

SQLはGOTO/LABELをサポートしていますありがとうございました: http://msdn.microsoft.com/en-us/library/ms180188.aspx

ない、あなたのストアドプロシージャで、このような精巧なフロー制御を必要とする理由を完全に確認してください。ストアドプロシージャを別のプロシージャに分割してみてください。

2

GOTO構文を使用できます。 Labelを定義してから、GOTOを定義します。このように:

DECLARE @test INT=1 

SomeName: 
    print 'test' 

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

この意志PRINT 'test' 2回

リファレンスhere

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 
関連する問題