溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-08-18 11:37:08 來源:億速云 閱讀:198 作者:chen 欄目:數(shù)據(jù)庫

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

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

  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錯誤時,默認(rèn)會rollback引起錯誤的語句,而繼續(xù)執(zhí)行后續(xù)語句。

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

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

  1.在事務(wù)語句最前面加上setxact_aborton

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

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

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

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

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

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

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

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

到此,關(guān)于“SQLServer在存儲過程中編寫事務(wù)處理代碼的方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI