tsql事务

Nao*_*aor 5 sql t-sql sql-server

为了在事务中包装存储过程,我添加以下内容:

CREATE PROCEDURE [dbo].[P_ORD_InsertTextField]
    //PARAMS
AS
BEGIN
    BEGIN TRY
    BEGIN TRANSACTION

    //STP BODY

    COMMIT
    END TRY
    BEGIN CATCH
      IF @@TRANCOUNT > 0
         ROLLBACK

      DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
      SELECT @ErrMsg = ERROR_MESSAGE(),
             @ErrSeverity = ERROR_SEVERITY()

      RAISERROR(@ErrMsg, @ErrSeverity, 1)
    END CATCH
END
GO
Run Code Online (Sandbox Code Playgroud)

有没有更短的方式做同样的事情?这是"只是"处理事务的巨大代码块.

gbn*_*gbn 4

不,差不多就是这样了。

您可以将 @ErrMsg 处理隐藏在存储过程或 UDF 后面,并且不需要 @ErrSeverity 处理。通常是 16,这是“用户定义的错误”

请也在这里查看我的答案:Nestedstored procedure contains TRY CATCH ROLLBACK pattern?