日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

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

SQL Server中數(shù)據(jù)庫(kù)事務(wù)處理是相當(dāng)有用的,鑒于很多SQL初學(xué)者編寫的事務(wù)處理代碼存往往存在漏洞,本文我們介紹了三種不同的方法,舉例說(shuō)明了如何在存儲(chǔ)過(guò)程事務(wù)處理中編寫正確的代碼。希望能夠?qū)δ兴鶐椭?/p>

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

在編寫SQL Server 事務(wù)相關(guān)的存儲(chǔ)過(guò)程代碼時(shí),經(jīng)??吹较旅孢@樣的寫法:

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

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

 
 
 
  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í)行時(shí)會(huì)出現(xiàn)一個(gè)違反not null 約束的錯(cuò)誤信息,但隨后又提示(1 row(s) affected)。 我們執(zhí)行select * from demo 后發(fā)現(xiàn)insert into demo values(2) 卻執(zhí)行成功了。 這是什么原因呢? 原來(lái) SQL Server在發(fā)生runtime 錯(cuò)誤時(shí),默認(rèn)會(huì)rollback引起錯(cuò)誤的語(yǔ)句,而繼續(xù)執(zhí)行后續(xù)語(yǔ)句。

如何避免這樣的問(wèn)題呢?有三種方法:

1. 在事務(wù)語(yǔ)句最前面加上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 

當(dāng)xact_abort 選項(xiàng)為on 時(shí),SQL Server在遇到錯(cuò)誤時(shí)會(huì)終止執(zhí)行并rollback 整個(gè)事務(wù)。

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

 
 
 
  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 異常處理機(jī)制。

 
 
 
  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 

下面是個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程,演示事務(wù)處理過(guò)程。

 
 
 
  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  

關(guān)于SQL Server數(shù)據(jù)庫(kù)中在存儲(chǔ)過(guò)程中編寫正確的事務(wù)處理代碼的方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>

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


文章題目:SQLServer在存儲(chǔ)過(guò)程中編寫事務(wù)處理代碼的三種方法
分享網(wǎng)址:http://www.5511xx.com/article/dpjeijo.html