首先關於事務的幾個操作如下:
begin tran -- 開啟事務
commit tran -- 提交事務
rollback tran -- 回滾事務
-- 新建乙個測試表demo,id自增
set xact_abort on -- 設定當執行發生錯誤時,整個事務終止並回滾
begin tran -- 開啟事務
insert
into demo values (5)
insert
into demo values (2)
insert
into demo values (5)
insert
into demo values (null)
insert
into demo values (6)
commit tran -- 提交事務
go
當執行到insert into demo values (null)
這一句時會發生錯誤,因為設定了set xact_abort on
,因此所有操作會回滾。
操作結果:
再看一下資料
跟剛剛一樣,資料沒有增加。
接下來對比一下不設定xact_abort on
的情況。
set xact_abort off
begin tran -- 開啟事務
insert
into demo values (5)
insert
into demo values (2)
insert
into demo values (5)
insert
into demo values (null)
insert
into demo values (6)
commit tran -- 提交事務
資料:
select * from demo
可以看到除了insert into demo values (null)
這一句,其他資料是有插到資料庫的。
注意:
關於事務回滾還有一點,我建的demo
表的id
欄位是自增的。
看最後的那張圖,id=2
的下一條是id=7
,這說明了其實除了insert into demo values (null)
這一句,其他語句是已經執行了,插入到資料庫了的,只是因為遇到錯誤回滾時又把它們刪除了。所以再插入的時候id
就是從7開始了。
ps:其實不使用set xact_abort on
也可以手動捕捉錯誤進行回滾。
這裡只是簡單介紹一下。
在每個單獨的dml語句執行後,立即判斷執行狀態,並做相應處理。
begin
transaction
declare @errorsum int --定義區域性變數
set @errorsum=0 --初始化臨時變數
update bank set currentmoneycurrentmoney= currentmoney-1000
where customername='張三'
set @errorsum=@errorsum+@@error --累計是否有錯誤
update bank set currentmoneycurrentmoney= currentmoney+1000
where customername='李四'
set @errorsum=@errorsum+@@error --累計是否有錯誤
if @errorsum<>0 --如果有錯誤
begin
rollback
transaction
endelse
begin
commit
transaction
endgo
2. 可利用 try…catch 異常處理機制。
begin tran
begin try
update statement 1 ...
delete statement 2 ...
endtry
begin catch
if @@trancount > 0
rollback tran
end catch
if @@trancount > 0
commit tran
go
參考:
乙個sql server資料庫事務的使用示例
sql server在儲存過程中編寫事務處理**的三種方法
Sql Server事務簡單用法
1 var constr server localhost database data user sa pwd 123456 2using var connection new sqlconnection constr 3 where stationnum 58365 and datetime 8....
SQL Server事務的使用
例如 在關聯式資料庫中,乙個事務可以是一條sql語句,一組sql語句或整個程式 事務是恢復和併發控制的基本單位。事務應該具有4個屬性 原子性 一致性 隔離性 永續性。這四個屬性通常稱為acid特性。原子性 atomicity 乙個事務是乙個不可分割的工作單位,事務中包括的操作要麼都做,要麼都不做。一...
SQLserver中事務的使用
一 有時候我們需要同時執行很多個sql操作,但是這些要執行的sql有一部分執行成功了,比如原本應該向幾個相互關聯的表中插入資料,但是只有其中乙個表的資料插入成功了,這時按照正常的邏輯,只要插入其中乙個表失敗了,那麼就應該撤銷已經成功了插入操作,這樣事務就派上用場了。二 事務的特性 1 原子性 事務是...