明確交易
明確交易(Explicit Transaction)是由設計人員明確定義事務的啟動與結束的一種事務。
可使用 BEGIN TRANSACTION、COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION、ROLLBACK WORK 等語句來定義明確交易。
Create PROCEDURE sp_test(@ID varchar(50))
AS
Begin Tran --事務開始
Update Tb set CDate=getdate() where TbID=@ID
if @@ERROR >0 --若有錯誤
BEGIN
ROLLBACK TRAN --事務還原
Return
End
DECLARE @PID varchar(50),@TbQty int
DECLARE cur_1 CURSOR FOR SELECT PID, Qty FROM TbDetail where TbID=@ID --聲明遊標資料事務
OPEN cur_1 --開啟遊標
FETCH NEXT FROM cur_1 INTO @PID,@TbQty --從遊標擷取兩個欄位值到變數
WHILE @@FETCH_STATUS = 0 --用迴圈逐項處理
BEGIN
Update Ta set TaQty=TaQty-@TbQty where PID=@PID
FETCH NEXT FROM cur_1 INTO @PID,@TbQty
if @@ERROR >0 –若有錯誤
Begin
ROLLBACK TRAN --事務還原
CLOSE cur_1 --關閉及釋放遊標
DEALLOCATE cur_1
BREAK
END
END
CLOSE cur_1
DEALLOCATE cur_1
COMMIT TRAN --事務提交
自動認可事務
這是 SQL Server 的預設模式,所有未特別聲明的事務,都被視為自動認可的事務。但
是只以一個操作作為事務範圍,如一個 Update 或 Delete 等。當事務完成時,每個單獨的
T-SQL 陳述式都將被提交或因出現錯誤而還原。
隱含交易
通過 API 函數或 T-SQL 的 SET IMPLICIT_TRANSACTIONS ON 語句將隱含交易模式
設定為開啟。下一個語句會自動開始一項新的事務。當該項事務完成時,下一個 T-SQL 語
句會再開始一項新的事務。
SET IMPLICIT_TRANSACTIONS ON
INSERT INTO Ta (aa,bb) VALUES ('11', '22')
COMMIT TRANSACTION
GO
以上程式表示先使用“SET IMPLICIT_TRANSACTIONS ON”啟動隱含交易,然後在
下一行程式建立事務,以 Insert 語句添加一項記錄至 Category 資料表,最後再用 COMMIT
TRANSACTION 提交事務。提交之後若還有程式,會再開始新的事務。總之,隱含交易的
意思是由 SQL Server 系統在所有提交、還原之後,自動建立新事務。