亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

普兰县| 巧家县| 崇明县| 北碚区| 岳阳市| 北京市| 潜江市| 廊坊市| 河南省| 阜城县| 天台县| 昌宁县| 承德县| 绥棱县| 修武县| 凤翔县| 沙田区| 桦南县| 巢湖市| 濮阳县| 百色市| 南阳市| 余干县| 兴化市| 达拉特旗| 芜湖市| 宁国市| 松阳县| 刚察县| 宜州市| 郸城县| 五常市| 宁都县| 兰西县| 奎屯市| 五家渠市| 波密县| 溧阳市| 民和| 苍山县| 岳普湖县|