1

次の SP を考えると ...

CREATE PROCEDURE [dbo].[trytest1]

AS

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

SELECT 'Testing 1'

DECLARE @int1 INTEGER
DECLARE @int2 INTEGER
DECLARE @int3 INTEGER

SET @int1 = 0
SET @int2 = 0

    BEGIN TRY
        SELECT 'Testing 2'

        SET @int3 = @int1 / @int2

        SELECT 'Testing 3'
    END TRY

    BEGIN CATCH
        SELECT 'Testing 4'
    END CATCH

SET @int3 = @int1 + @int2
SELECT 'Testing 5'

これを実行すると...

テスト 1

テスト 2

テスト 4

テスト 5

戻り値 -6

Catch は 0 で除算をキャッチしますが、catch ブロックの後に実行が続行されるのはなぜですか? ずっと-6のままですか?

そして、私がここにいる間、ちょっと興味があるのですが、Try Block で実行を続けることは可能ですか (つまり、'Testing 3' を選択します)。

ありがとう

4

1 に答える 1

1

これは、すべての例外処理メカニズムの標準的な動作です。TRY と CATCH があり、その間にコードがあります。コードに例外がある場合、実行が停止し、CATCH ブロックに移動します。

を実行する場合はSELECT 'Testing 3'、TRY...CATCH ブロックの外に配置する必要があります。

proc で他に何も実行したくない場合は、TRY...CATCH ブロックにすべてを配置するか、catch ブロックで実行を行います。

于 2012-04-19T11:56:28.930 に答える