首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >最佳实践尝试/捕获抛出和XACT_ABORT sql server

最佳实践尝试/捕获抛出和XACT_ABORT sql server
EN

Database Administration用户
提问于 2019-05-08 06:07:01
回答 1查看 2.7K关注 0票数 0

我以前使用过为我们生成ETL脚本的软件。脚本具有以下结构,但这似乎与我在msdn中看到的内容相反。有人能对下面的结构提供任何想法吗?

代码语言:javascript
代码运行次数:0
运行
复制
SET XACT_ABORT OFF

SET NOCOUNT ON

BEGIN TRY

'DO STUFF'

BEGIN CATCH

SET @return_msg = 'procedure name FAILED'

  + '. Step ' + CONVERT(VARCHAR,ISNULL(@v_step,0))

  + '. Error Num: ' + CONVERT(VARCHAR,ISNULL(ERROR_NUMBER(),0))

  + '. Error Msg: ' + ERROR_MESSAGE()

  SELECT @return_msg

END CATCH

IF XACT_STATE() <> 0

  BEGIN

   ROLLBACK TRANSACTION

  END

  RETURN 0

END
EN

回答 1

Database Administration用户

发布于 2019-05-08 07:00:35

要用xact_state实现有效的尝试捕获,请遵循此msdn链接

代码语言:javascript
代码运行次数:0
运行
复制
SET XACT_ABORT on

SET NOCOUNT ON

BEGIN TRY

'DO STUFF'
End Try
BEGIN CATCH

SET @return_msg = 'procedure name FAILED'

  + '. Step ' + CONVERT(VARCHAR,ISNULL(@v_step,0))

  + '. Error Num: ' + CONVERT(VARCHAR,ISNULL(ERROR_NUMBER(),0))

  + '. Error Msg: ' + ERROR_MESSAGE()

  SELECT @return_msg

-- Test XACT_STATE for 0, 1, or -1.  
    -- If 1, the transaction is committable.  
    -- If -1, the transaction is uncommittable and should   
    --     be rolled back.  
    -- XACT_STATE = 0 means there is no transaction and  
    --     a commit or rollback operation would generate an error.  

    -- Test whether the transaction is uncommittable.  
    IF (XACT_STATE()) = -1  
    BEGIN  
        PRINT 'The transaction is in an uncommittable state.' +  
              ' Rolling back transaction.'  
        ROLLBACK TRANSACTION;  
    END;  

    -- Test whether the transaction is active and valid.  
    IF (XACT_STATE()) = 1  
    BEGIN  
        PRINT 'The transaction is committable.' +   
              ' Committing transaction.'  
        COMMIT TRANSACTION;     
    END;  

END CATCH

  RETURN 0
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/237608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档