自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

數(shù)據(jù)庫 SQL Server
本文我們主要介紹了SQL Server數(shù)據(jù)庫中在存儲過程中編寫正確的事務(wù)處理代碼的方法,希望能夠?qū)δ兴鶐椭?/div>

SQL Server中數(shù)據(jù)庫事務(wù)處理是相當(dāng)有用的,鑒于很多SQL初學(xué)者編寫的事務(wù)處理代碼存往往存在漏洞,本文我們介紹了三種不同的方法,舉例說明了如何在存儲過程事務(wù)處理中編寫正確的代碼。希望能夠?qū)δ兴鶐椭?/p>

在編寫SQL Server 事務(wù)相關(guān)的存儲過程代碼時,經(jīng)??吹较旅孢@樣的寫法:

 

  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 

 

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

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

1. 在事務(wù)語句最前面加上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 

 

當(dāng)xact_abort 選項(xiàng)為on 時,SQL Server在遇到錯誤時會終止執(zhí)行并rollback 整個事務(wù)。

2. 在每個單獨(dú)的DML語句執(zhí)行后,立即判斷執(zhí)行狀態(tài),并做相應(yīng)處理。

 

  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 異常處理機(jī)制。

 

  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 

 

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

 

  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  

 

關(guān)于SQL Server數(shù)據(jù)庫中在存儲過程中編寫正確的事務(wù)處理代碼的方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>

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

【編輯推薦】

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

2011-03-15 10:22:42

SQL Server 聯(lián)機(jī)事務(wù)處理

2009-04-15 17:03:15

OracleSQL Server事務(wù)處理

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數(shù)

2009-07-15 17:41:55

iBATIS事務(wù)處理

2011-08-15 15:56:31

SQL Server

2010-11-10 13:28:06

SQL Server刪

2010-01-04 13:06:50

ADO.NET事務(wù)

2009-10-09 16:47:44

Oracle數(shù)據(jù)庫事務(wù)

2009-09-14 19:55:03

LINQ事務(wù)處理

2021-10-13 09:02:05

Python中文亂碼Python基礎(chǔ)

2022-05-31 16:00:46

Go 編程語言復(fù)制文件Go 標(biāo)準(zhǔn)庫

2009-11-04 15:05:45

ADO.NET事務(wù)

2015-03-18 09:33:41

大數(shù)據(jù)分布式系統(tǒng)事務(wù)處理

2010-11-09 14:35:48

SQL Server查

2014-01-22 13:37:53

2010-04-13 15:44:00

Oracle與SqlS

2009-07-09 18:15:42

JDBC事務(wù)處理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號