2012-04-19 2 views
1

Учитывая следующий SP ...SQLServer 2008 - Возвращаемое значение из хранимой процедуры после ловли исключение

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

Testing 2

Испытание 4

Испытание 5

Возвращаемое значение -6

Поймайте улавливает деление на ноль, но выполнение продолжается после улова блока Im интересно, почему, даже если запрос выполнен успешно и продолжались после trycatch нормально, возвращаемое значение -6. Будет ли он оставаться навсегда?

И, в то время как я здесь, просто интересно, можно ли продолжить выполнение в пробном блоке (т.е. выберите «Testing 3»)

Благодаря

+0

возможно дубликат [SQL Server хранится порядок возврата кода странность ] (http://stackoverflow.com/questions/2965211/sql-server-stored-procedure-return-code-oddity) – gbn

+0

OK - информация была там, да. Большое спасибо. –

ответ

1

это стандартное поведение всех механизмов обработки исключений , У вас есть TRY, CATCH и код между ними. Если в коде есть исключение, он перестает работать и переходит в блок CATCH.

Если вы хотите, чтобы выполнялся SELECT 'Testing 3', он должен располагаться вне блока TRY ... CATCH.

Если вы не хотите, чтобы выполнить что-нибудь еще на прок, вы либо поставить все на блоке TRY ... CATCH ИЛИ существует исполнение на блоке поймать

+0

Хорошо спасибо большое спасибо –

+0

решила вашу проблему? – Diego

+0

извините. забыл. да. Благодарю. –

Смежные вопросы