成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server在存儲過程中編寫事務處理代碼的三種方法

數據庫 SQL Server
本文我們主要介紹了SQL Server數據庫中在存儲過程中編寫正確的事務處理代碼的方法,希望能夠對您有所幫助。

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

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

 

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

 

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

 

  1. create table demo(id int not null)   
  2. go   
  3. begin tran   
  4. insert into demo values (null)  
  5. insert into demo values (2)   
  6. commit tran   
  7. 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. set xact_abort on   
  2. begin tran   
  3. update statement 1 ...   
  4. update statement 2 ...   
  5. delete statement 3 ...   
  6. commit tran   
  7. go 

 

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

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

 

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

 

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

 

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

 

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

 

  1. create procedure dbo.pr_tran_inproc as begin set nocount on   
  2. begin tran  
  3. update statement 1 ...   
  4. if @@error <> 0   
  5. begin rollback tran   
  6. return -1 end   
  7. delete statement 2 ...   
  8. if @@error <> 0   
  9. begin rollback tran   
  10. return -1   
  11. end commit tran   
  12. return 0   
  13. end   
  14. go  

 

關于SQL Server數據庫中在存儲過程中編寫正確的事務處理代碼的方法就介紹到這里了,希望本次的介紹能夠對您有所幫助。

原文出處:http://www.sqlstudy.com/sql_article.php?id=2008060701。

【編輯推薦】

  1. MySQL數據庫完整備份與增量備份的原理簡介
  2. SQL Server鏈接服務器訪問DB2設置步驟圖解
  3. 詳解xtrabackup對MySQL進行備份和恢復的全過程
  4. SQL Server中通過設置SET NOCOUNT來優化存儲過程
  5. VC程序訪問Oracle數據庫的存儲過程時的問題解決方案
責任編輯:趙鵬 來源: www.sqlstudy.com
相關推薦

2011-03-15 10:22:42

SQL Server 聯機事務處理

2009-04-15 17:03:15

OracleSQL Server事務處理

2011-04-27 15:55:16

2011-04-27 16:09:48

SQL ServerSSIS

2009-07-08 12:56:32

編寫Servlet

2010-10-20 13:52:07

SQL Server數

2009-07-15 17:41:55

iBATIS事務處理

2010-11-10 13:28:06

SQL Server刪

2011-08-15 15:56:31

SQL Server

2010-01-04 13:06:50

ADO.NET事務

2009-09-14 19:55:03

LINQ事務處理

2021-10-13 09:02:05

Python中文亂碼Python基礎

2009-11-04 15:05:45

ADO.NET事務

2009-10-09 16:47:44

Oracle數據庫事務

2015-03-18 09:33:41

大數據分布式系統事務處理

2022-05-31 16:00:46

Go 編程語言復制文件Go 標準庫

2010-04-13 15:44:00

Oracle與SqlS

2014-01-22 13:37:53

2021-09-10 18:09:42

SQL注入漏洞網絡攻擊

2010-01-13 14:13:24

VB.NET事務處理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜精品一区二区三区嫩草 | 国产精品第2页 | 在线一级片 | 欧美日韩在线不卡 | 国产日韩欧美精品一区二区三区 | 国产福利在线 | 欧美一级大片 | 日韩欧美手机在线 | 手机看片169 | 精品国产乱码久久久久久中文 | 国产农村妇女毛片精品久久麻豆 | 日韩免费视频一区二区 | 午夜日韩视频 | www.色53色.com | 国产黄色在线观看 | wwww.xxxx免费| 成人午夜视频在线观看 | 亚洲一区二区三区桃乃木香奈 | 欧美日韩专区 | 精久久久| 欧美成人免费在线 | 91精品国产自产在线老师啪 | av黄色片在线观看 | 欧美精产国品一二三区 | 热99视频 | 97精品超碰一区二区三区 | 成人在线免费视频 | 日韩中文字幕在线不卡 | 欧美日韩亚洲国产综合 | 精品久 | 久久av一区二区 | 国产日韩一区二区三区 | 北条麻妃一区二区三区在线观看 | 久久精品欧美一区二区三区不卡 | 久久精品高清视频 | 欧美中文字幕在线 | 中文字幕精品一区二区三区精品 | 黄色大片免费看 | 亚洲精品久 | 日日夜夜天天干 | 中文字幕精品一区 |