關於SQLSERVER 事物的運用 1 普通事物

2021-06-14 05:58:58 字數 2012 閱讀 2200

關於sqlserver 事物的運用

概述:以往在sql2000下處理異常通常的方式比較繁瑣,sql2005版本以上加入了begin try end/try begin cath end catch 是異常的捕獲稍微顯得簡單一些,根據我的測試,將我對sql事物的處理做一下整理;本文分為三個部分來描述,重點講述對sql2005以上版本對事物的處理,sql2000略過了。第一部分:針對普通的事物描述。第二部分針對自定義錯誤的丟擲以及回滾。第三部分:巢狀事物以及巢狀的儲存過程的回滾;

第一部分:針對普通的事物描述

1》  基本語法描述

begin tran

select 1/0

insert into table1 select 1

commit tran

如果這樣是這樣執行,select 1/0是明顯的錯誤,但資料1還是被插入到table1中,

不能達到要麼全部執行成功,要麼就全部回滾的機制,為什麼?因為沒有進行異常的捕獲,如何進行異常的捕獲,通常有以下三種方式

1》利用@@error每執行一條語句進行判斷@error的狀態,其**如下

begin tran

select 1/0

if@@error>0gotoerr

insertinto table1 select 1

commit tran

return

err:

rollback tran

小結:利用

@@error

對執行的結果進行判斷,如果錯誤,跳轉到

err標籤,並回滾

2》利用set

xact_abort

on語句如下

set xact_abort on

begin tran

select 1/0

insert into t_test select 12

commit tran

小結:當開啟了set

xact_abort

on 之後只要在程式內部發生錯誤都會自動執行回滾

3》利用begin try end try /begin catch endcatch

begin try

begin tran

select 1/0

insertintot_test select 12

commit tran

end try

begin catch

declare @err varchar(30)=error_message()

rollback tran

raiserror( @err,17, 1)

end catch

小結:(17,1),是定義的錯誤等級,我隨便搞的,可以通過系統特性取得這些值, begin catch /end catch主要是對執行語句執行的異常部分進行捕獲,並人為的丟擲異常,捕獲的內容有

error_message()錯誤的資訊;

error_number(),錯誤的行數;

error_severity(),錯誤的等級;

error_state(),錯誤的狀態;

error_procedure(),錯誤的儲存過程(含巢狀的儲存過程)

第一部分的小結:

通過以上的三種方式都可以實現異常的捕獲,而進行事物的回滾,三種方式各有什麼優劣呢,@@rowcount不用想,很煩人,我認為沒有什麼優勢

set abort on 很好,一句話就可以解決,出現的異常,無論是執行的異常,還是自定義的異常(下一部分描述),都可以處理,但對於巢狀的異常輸出沒有好的解決方案

beign try end try方式語法上稍微繁瑣點,但對於異常的輸出,特別是巢狀的儲存過程的異常輸出的處理上更加的詳盡些(第三部分講述)

關於 sqlserver 的事物回滾

例 先進行標記事物的開始 begin transaction 進行表的操作,例如插入 修改等。在進行過程中,如果發生錯誤則回滾事物 rollback transaction 若事物結束,則提交事物 commit 在事物過程中通常用 error 語句是否發生錯誤 例如,插入幾條資料,後面的資料主鍵重複...

SqlServer中的事物彙總

在乙個mis系統中,沒有用事務那就絕對是有問題的,要麼就只有一種情況 你的系統實在是太小了,業務業務邏輯有只要一步執行就可以完成了。因此掌握事務處理的方法是很重要,進我的歸類在.net中大致有以下4種事務處理的方法。大家可以參考一下,根據實際選擇適當的事務處理。1 sql事務 sql事務是使用sql...

關於mysql裡面的事物 mysql 事物

mysql之事物詳解 一 事務定義 事務 乙個最小的不可再分的工作單元 通常乙個事務對應乙個完整的業務 例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元 乙個完整的業務需要批量的dml insert update delete 語句共同聯合完成 事務只和dml語句有關,或者說dml語句才有事務。這...