日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
SQLServer在存儲過程中編寫事務處理代碼的三種方法

SQL Server中數(shù)據庫事務處理是相當有用的,鑒于很多SQL初學者編寫的事務處理代碼存往往存在漏洞,本文我們介紹了三種不同的方法,舉例說明了如何在存儲過程事務處理中編寫正確的代碼。希望能夠對您有所幫助。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、成都做網站、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的奉新網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

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

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

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

 
 
 
  1. create table demo(id int not null)   
  2. go   
  3. begin tran   
  4. insert into demo values (null)  
  5. insert into demo values (2)   
  6. commit tran   
  7. go 

執(zhí)行時會出現(xiàn)一個違反not null 約束的錯誤信息,但隨后又提示(1 row(s) affected)。 我們執(zhí)行select * from demo 后發(fā)現(xiàn)insert into demo values(2) 卻執(zhí)行成功了。 這是什么原因呢? 原來 SQL Server在發(fā)生runtime 錯誤時,默認會rollback引起錯誤的語句,而繼續(xù)執(zhí)行后續(xù)語句。

如何避免這樣的問題呢?有三種方法:

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

 
 
 
  1. set xact_abort on   
  2. begin tran   
  3. update statement 1 ...   
  4. update statement 2 ...   
  5. delete statement 3 ...   
  6. commit tran   
  7. go 

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

2. 在每個單獨的DML語句執(zhí)行后,立即判斷執(zhí)行狀態(tài),并做相應處理。

 
 
 
  1. begin tran   
  2. update statement 1 ...  
  3. if @@error <> 0   
  4. begin rollback tran   
  5. goto labend   
  6. end   
  7. delete statement 2 ...   
  8. if @@error <> 0  
  9. begin rollback tran   
  10. goto labend   
  11. end   
  12. commit tran   
  13. labend:   
  14. go 

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

 
 
 
  1. begin tran   
  2. begin try   
  3. update statement 1 ...   
  4. delete statement 2 ...   
  5. endtry   
  6. begin catch  
  7. if @@trancount > 0   
  8. rollback tran   
  9. end catch  
  10. if @@trancount > 0   
  11. commit tran  
  12. go 

下面是個簡單的存儲過程,演示事務處理過程。

 
 
 
  1. create procedure dbo.pr_tran_inproc as begin set nocount on   
  2. begin tran  
  3. update statement 1 ...   
  4. if @@error <> 0   
  5. begin rollback tran   
  6. return -1 end   
  7. delete statement 2 ...   
  8. if @@error <> 0   
  9. begin rollback tran   
  10. return -1   
  11. end commit tran   
  12. return 0   
  13. end   
  14. go  

關于SQL Server數(shù)據庫中在存儲過程中編寫正確的事務處理代碼的方法就介紹到這里了,希望本次的介紹能夠對您有所幫助。

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


網站欄目:SQLServer在存儲過程中編寫事務處理代碼的三種方法
網站地址:http://www.dlmjj.cn/article/dpjeijo.html