一、格式類似於
CREATE PROCEDURE YourProcedure
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY---------------------開始捕捉異常
BEIN TRAN------------------開始事務
UPDATE A SET A.names = B.names FROM 表1 AS A INNER JOIN 表2 AS B ON A.id = B.id
UPDATE A SET A.names = B.names FROM 表1 AS A INNER JOIN 表2 AS B ON A.TEST = B.TEST
COMMIT TRAN -------提交事務
END TRY-----------結束捕捉異常
BEGIN CATCH------------有異常被捕獲
IF @@TRANCOUNT > 0---------------判斷有沒有事務
BEGIN
ROLLBACK TRAN----------回滾事務
END
EXEC YourLogErrorProcedure-----------記錄存儲過程執行時的錯誤信息,自定義
END CATCH--------結束異常處理
END
二、實例
ALTER PROC usp_AccountTransaction
@AccountNum INT,
@Amount DECIMAL
AS
BEGIN
BEGIN TRY --Start the Try Block..
BEGIN TRANSACTION -- Start the transaction..
UPDATE MyChecking SET Amount = Amount - @Amount
WHERE AccountNum = @AccountNum
UPDATE MySavings SET Amount = Amount + @Amount
WHERE AccountNum = @AccountNum
COMMIT TRAN -- Transaction Success!
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRAN --RollBack in case of Error
END
EXEC YourLogErrorProcedure-----------記錄存儲過程執行時的錯誤信息,自定義
END CATCH
END
GO
參考資料: SQL SERVER中 存儲過程使用事務與捕獲異常 http://www.studyofnet.com/news/1238.html