2011-03-13 55 views
5

为了保鲜膜保存在我添加下面的交易程序: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 @ErrMsg nvarchar(4000), @ErrSeverity int 
     SELECT @ErrMsg = ERROR_MESSAGE(), 
      @ErrSeverity = ERROR_SEVERITY() 

     RAISERROR(@ErrMsg, @ErrSeverity, 1) 
    END CATCH 
END 
GO 

是否有做同样的任何短呢?这是一个巨大的代码块,用于“仅”处理交易。

回答

4

不,这是非常多的。

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

看到我的回答也请:Nested stored procedures containing TRY CATCH ROLLBACK pattern?

+0

@gbn:哪些是你的答案没有计数的原因是什么? – Naor 2011-03-13 12:59:29

+1

@Naor:“受影响的xx行”返回给客户端的额外记录集。它也打破了一些ORM和一些客户。请在这里看到我的问题请http://stackoverflow.com/q/1483732/27535 – gbn 2011-03-13 13:01:43

+0

@gbn:那么你把SET NOCOUNT放在你有的每个存储过程中? – Naor 2011-03-13 13:18:46