SQL SERVER 事務的使用(tran)


sql server事務的使用是為了確保數據的一致性。

通常寫法

begin tran
--sql 語句1
--sql 語句2
--sql 語句3
commit tran

上面寫法存在隱患,當操作(增刪改)是由null引發的錯誤時,事務會跳過錯誤繼續執行正常的語句。例如:

--創建表Student
create table Student(Name nvarchar(20) not null)
--建立事務
begin tran
inserted into Student(Name) values (null)
inserted into Student(Name) values ('小札')
inserted into Student(Name) values (null)
commit tran
--由null引發的錯誤,insert,delete,update都會跳過錯誤繼續執行

上面結果會多一條數據為“小札”。為了避免了這樣的問題:

有三種方法:其中@@error,@@trancount是全局變量,只要發生錯誤,@@error不等於0,只要執行一次事務,@@trancount就+1,回滾會變為0。

【方法一】:xact_abort on/off  on:開啟,事務一旦出問題,全部回滾  off:關閉,不檢查事務是否發生錯誤。

set xact_abort on
begin tran
--sql語句1
--sql語句2
--sql語句3
commit

【方法二】:每條操作語句后面判斷是否回滾。

begin tran
--sql語句1
if @@error<>0
 begin
   rollback tran
   return --這里除了return跳出,也可以使用goto+標簽跳出事務
 end
--sql語句2
if @@error<>0
 begin
   rollback tran
   return
 end
commit tran

【方法三】:try  catch

begin tran
 begin try
    --sql語句1
    --sql語句2
    --sql語句3
 end try
 begin catch
    if @@trancount>0
        rollback tran
 end catch
 if @@trancount>0
    commit tran

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM