tsql事务

tsql事务,sql,sql-server,tsql,Sql,Sql Server,Tsql,为了在事务中包装存储过程,我添加了以下内容: 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 @ErrM

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

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

有没有比这更短的方法呢?这是一个巨大的代码块,用于“仅”处理事务。

不,这几乎就是它

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


请在此处查看我的答案:

@gbn:您的答案中没有计数的原因是什么?@Naor:“xx行受影响”会向客户端返回一个额外的记录集。它还破坏了一些orm和一些客户机。请看我的问题@gbn:那么您在所有存储过程中都设置了SET NOCOUNT?@Naor:是的,并将XACT_ABORT设置为ONtoo@gbn:我的意思是,您在每个存储过程中都设置了SET NOCOUNT,即使它不包含事务?