在儲存過程中新增事務
--存在就刪除
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[NAME]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ProcName]
GO
--還有一種刪除的寫法
IF EXISTS(SELECT * FROM sysobjects WHERE type='p' AND NAME='ProcName')
BEGIN
DROP PROC ProcName
END
go
--建立一個儲存過程
CREATE PROCEDURE ProcName
AS
BEGIN
BEGIN TRY
DECLARE @TranFlag INT --事務標誌 0:新建事務 1:儲存已經存在事務點
IF @@TRANCOUNT = 0 --事務個數為0,建立新事務
BEGIN
BEGIN TRAN CurrTran
SET @TranFlag = 0
END
ELSE --已經存在事務
SET @TranFlag = 1
SAVE TRAN CurrTran --儲存事務點,提交或回滾時從該事務點開始。
------------------------------
--進行相關操作。
------------------------------
IF @TranFlag = 0 --新建事務時才進行提交。
COMMIT TRAN CurrTran
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE() --列印一下錯誤的訊息文字
IF @TranFlag = 0
BEGIN
--回滾整個事務
ROLLBACK TRAN
END
ELSE
BEGIN
--回滾當前事務點
ROLLBACK TRAN CurrTran
END
END CATCH
END
GO