中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

SQL Server:存儲過程中編寫事務處理的方法小結

發布時間:2020-06-30 00:47:11 來源:網絡 閱讀:1346 作者:chenhao_asd 欄目:數據庫

/**8. SQLServer存儲過程中編寫事務處理的方法小結**/

原文出處: http://www.jb51.net/article/80636.htm

本文我們介紹了三種不同的方法,舉例說明了如何在存儲過程事務處理中編寫正確的代碼

1. 常見寫法:

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

begin tran

update statement 1 ...

update statement 2 ...

delete statement 3 ...

commit tran

 

2. 存在的問題/隱患:

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

create table demo(id int notnull)

go

begin tran

insert into demo values (null)

insert into demo values (2)

commit tran

go

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

方法1. 在事務語句最前面加上set xact_abort on;當xact_abort 選項為on 時,SQLServer在遇到錯誤時會終止執行并rollback 整個事務。

setxact_abort on

begintran

updatestatement 1 ...

updatestatement 2 ...

deletestatement 3 ...

committran

go

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

begintran

updatestatement 1 ...

if @@error <>0

beginrollbacktran

gotolabend

end

deletestatement 2 ...

if @@error <> 0

beginrollbacktran

gotolabend

end

committran

labend:

go

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

begintran

begintry

updatestatement 1 ...

deletestatement 2 ...

endtry

begincatch

if @@trancount >0

rollbacktran

endcatch

if @@trancount >0

committran

go

 

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

--set nocount on 表示不返回計數

create procedure dbo.pr_tran_inprocas begin set nocount on

begin tran

update statement 1...

if @@error <>0

begin rollback tran

return -1 end

delete statement 2...

if @@error <>0

begin rollback tran

return -1

end commit tran

return 0

end

go

 

執行:

Exec dbo.pr_tran_inproc


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴义市| 三亚市| 监利县| 丘北县| 隆林| 台南县| 凌源市| 梅河口市| 白山市| 西青区| 城口县| 兴化市| 镇康县| 绥滨县| 历史| 渑池县| 成安县| 宁津县| 会理县| 清徐县| 鹤岗市| 武冈市| 万州区| 丘北县| 靖远县| 蒙阴县| 蓬莱市| 梅河口市| 海门市| 呼伦贝尔市| 佳木斯市| 陵川县| 皮山县| 湛江市| 宜兴市| 科技| 舞阳县| 包头市| 永德县| 宁明县| 鄂伦春自治旗|