2011-03-13 92 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