SQL Server在預存程序中編寫交易處理代碼的三種方法

來源:互聯網
上載者:User

SQL Server中資料庫交易處理是相當有用的,鑒於很多SQL初學者編寫的交易處理代碼存往往存在漏洞,本文我們介紹了三種不同的方法,舉例說明了如何在預存程序交易處理中編寫正確的代碼。希望能夠對您有所協助。

在編寫SQL Server 事務相關的預存程序代碼時,經常看到下面這樣的寫法:

begin tran   
   update statement 1 ...   
   update statement 2 ...   
   delete statement 3 ...   
commit tran 

這樣編寫的SQL存在很大隱患。請看下面的例子:

create table demo(id int not null)   
go   
begin tran   
   insert into demo values (null)  
   insert into demo values (2)   
commit tran   
go 

執行時會出現一個違反not null 約束的錯誤資訊,但隨後又提示(1 row(s) affected)。 我們執行select * from demo
後發現insert into demo values(2) 卻執行成功了。 這是什麼原因呢? 原來 SQL Server在發生runtime
錯誤時,預設會rollback引起錯誤的語句,而繼續執行後續語句。

如何避免這樣的問題呢?

 

有三種方法:

1. 在事務語句最前面加上set xact_abort on

set xact_abort on   
begin tran   
   update statement 1 ...   
   update statement 2 ...   
   delete statement 3 ...   
commit tran   
go 

當xact_abort 選項為on 時,SQL Server在遇到錯誤時會終止執行並rollback 整個事務。

2. 在每個單獨的DML語句執行後,立即判斷執行狀態,並做相應處理。

begin tran   
   update statement 1 ...  
   if @@error <> 0   
      begin rollback tran   
      goto labend   
   end   
   delete statement 2 ...   
   if @@error <> 0  
      begin rollback tran   
      goto labend   
   end   
   commit tran   
   labend:   
go 

3. 在SQL Server 2005中,可利用 try...catch 異常處理機制。

begin tran   
begin try   
   update statement 1 ...   
   delete statement 2 ...   
end try   
begin catch  
   if @@trancount > 0   
      rollback tran   
end catch  
   if @@trancount > 0   
      commit tran  
go 

關於SQL Server資料庫中在預存程序中編寫正確的交易處理代碼的方法就介紹到這裡了,希望本次的介紹能夠對您有所協助。

原文出處:http://www.sqlstudy.com/sql_article.php?id=2008060701。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.