SQLServer在存儲過程中編寫事務處理代碼的方法有哪些

這篇文章主要介紹“SQLServer在存儲過程中編寫事務處理代碼的方法有哪些”,在日常操作中,相信很多人在SQLServer在存儲過程中編寫事務處理代碼的方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQLServer在存儲過程中編寫事務處理代碼的方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

為嘉峪關等地區(qū)用戶提供了全套網頁設計制作服務,及嘉峪關網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、成都網站建設、嘉峪關網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

在編寫SQLServer事務相關的存儲過程代碼時,經??吹较旅孢@樣的寫法:

begintranupdatestatement1...updatestatement2...deletestatement3...committran

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

createtabledemo(idintnotnull)gobegintraninsertintodemovalues(null)insertintodemovalues(2)committrango

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

SQLServer在存儲過程中編寫事務處理代碼有哪些方法

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

1.在事務語句最前面加上setxact_aborton

setxact_abortonbegintranupdatestatement1...updatestatement2...deletestatement3...committrango

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

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

begintranupdatestatement1...if@@error<>0beginrollbacktrangotolabendenddeletestatement2...if@@error<>0beginrollbacktrangotolabendendcommittranlabend:go

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

begintranbegintryupdatestatement1...deletestatement2...endtrybegincatchif@@trancount>0rollbacktranendcatchif@@trancount>0committrango

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

createproceduredbo.pr_tran_inprocasbeginsetnocountonbegintranupdatestatement1...if@@error<>0beginrollbacktranreturn-1enddeletestatement2...if@@error<>0beginrollbacktranreturn-1endcommittranreturn0endgo

到此,關于“SQLServer在存儲過程中編寫事務處理代碼的方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網站題目:SQLServer在存儲過程中編寫事務處理代碼的方法有哪些
網址分享:http://muchs.cn/article18/jojidp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供做網站網站策劃、虛擬主機、品牌網站制作、App開發(fā)、服務器托管

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站托管運營