SQLServer 2008 - 捕获异常后返回存储过程的值

时间:2012-04-19 11:50:12

标签: sql-server-2008 try-catch return-value

鉴于以下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捕获除以零,但在catch块之后继续执行 我好奇为什么即使查询执行成功和 通常在trycatch之后继续,返回值为-6。它会永远保持-6吗?

而且,虽然我在这里,但只是好奇,是否有可能继续在Try Block中执行(即选择'Testing 3')

由于

1 个答案:

答案 0 :(得分:1)

这是所有异常处理机制的标准行为。你有一个TRY和一个CATCH和代码。如果代码中有异常,它将停止运行并转到CATCH块。

如果要执行SELECT 'Testing 3',则必须将其放在TRY ... CATCH块之外。

如果您不想在proc上执行任何其他操作,您可以将所有内容放在TRY ... CATCH块上,或者在catch块上执行