一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server存儲過程中編寫事務處理的方法小結

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

2020-05-03 15:36lyflcear Sql Server

這篇文章主要介紹了SQL Server存儲過程中編寫事務處理的方法,結合實例形式總結分析了三種存儲過程中編寫事務處理的方法,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了SQL Server存儲過程中編寫事務處理的方法。分享給大家供大家參考,具體如下:

SQL Server中數據庫事務處理是相當有用的,鑒于很多SQL初學者編寫的事務處理代碼存往往存在漏洞,本文我們介紹了三種不同的方法,舉例說明了如何在存儲過程事務處理中編寫正確的代碼。希望能夠對您有所幫助。

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

?
1
2
3
4
5
begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
commit tran

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

?
1
2
3
4
5
6
7
create table demo(id int not null)
go
begin tran
insert into demo values (null)
insert into demo values (2)
commit tran
go

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

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

1. 在事務語句最前面加上set xact_abort on

?
1
2
3
4
5
6
7
set xact_abort on
begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
commit tran
go

當xact_abort 選項為on 時,SQL Server在遇到錯誤時會終止執行并rollback 整個事務。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
begin tran
update statement 1 ...
if @@error <> 0
begin rollback tran
goto labend
end
delete statement 2 ...
if @@error <> 0
begin rollback tran
goto labend
end
commit tran
labend:
go

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

?
1
2
3
4
5
6
7
8
9
10
11
12
begin tran
begin try
update statement 1 ...
delete statement 2 ...
endtry
begin catch
if @@trancount > 0
rollback tran
end catch
if @@trancount > 0
commit tran
go

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
create procedure dbo.pr_tran_inproc as 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

希望本文所述對大家SQL Server數據庫程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 贰佰麻豆剧果冻传媒一二三区 | 日本护士撒尿 | 白丝尤物的下面被疯狂蹂躏 | yellow在线| 四虎黄色网址 | 亚洲欧美天堂综合久久 | 男人午夜视频在线观看 | 女人爽到喷水的视频免费 | 日本在线观看www免费 | 免费观看国产精品 | 国产第一综合另类色区奇米 | 特a级片 | 亚洲视频精选 | 波多野结衣在线免费观看 | 亚洲精品免费在线 | 涩情主播在线翻车 | 金牛网155755水心论坛黄大父母 | 亚洲视频久久 | 国产一区视频在线免费观看 | 幻女free性摘花第一次 | 人人福利 | 国产欧美日韩视频在线观看一区二区 | 五月香婷婷| 草草草草视频 | 成年男女免费大片在线观看 | 国产成人精品免费久久久久 | 日本xxxxxxxxx高清hd | 99国产小视频 | 国产精品福利在线观看入口 | 关晓彤被调教出奶水的视频 | 亚洲六月丁香六月婷婷蜜芽 | 波多野结衣在线观看中文字幕 | 男人天堂色男人 | 亚洲天堂视频在线观看免费 | free性泰国娇小videos | 999资源站 | 午夜办公室 | 亚洲色图色| 亚洲天堂视频在线免费观看 | 无人区在线观看免费视频国语 | 国内精品视频九九九九 |