91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

舞阳县| 武汉市| 宝兴县| 新田县| 南丹县| 平南县| 故城县| 绥阳县| 济阳县| 武平县| 伊宁市| 呼伦贝尔市| 伊金霍洛旗| 焉耆| 吉木萨尔县| 柞水县| 陈巴尔虎旗| 京山县| 宣威市| 永善县| 望谟县| 江川县| 绿春县| 南阳市| 滨海县| 关岭| 兴仁县| 福鼎市| 舒兰市| 疏勒县| 怀集县| 都昌县| 特克斯县| 德格县| 桦甸市| 绥宁县| 墨竹工卡县| 澄迈县| 宁城县| 北碚区| 绥阳县|