最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL Server存儲過程中編寫事務(wù)處理的方法小結(jié)

 更新時間:2016年03月08日 11:35:30   作者:lyflcear  
這篇文章主要介紹了SQL Server存儲過程中編寫事務(wù)處理的方法,結(jié)合實例形式總結(jié)分析了三種存儲過程中編寫事務(wù)處理的方法,具有一定參考借鑒價值,需要的朋友可以參考下

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

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

在編寫SQL Server 事務(wù)相關(guān)的存儲過程代碼時,經(jīng)常看到下面這樣的寫法:

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

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

create table demo(id int not null)
go
begin tran
insert into demo values (null)
insert into demo values (2)
commit tran
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

set xact_abort on
begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
commit tran
go

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

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

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

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

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

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數(shù)據(jù)庫程序設(shè)計有所幫助。

相關(guān)文章

  • SQL中NVL()函數(shù)的用法

    SQL中NVL()函數(shù)的用法

    SQL中的NVL()函數(shù)是一個空值轉(zhuǎn)換函數(shù),本文主要介紹了SQL中NVL()函數(shù)的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • SQL開窗函數(shù)的具體實現(xiàn)詳解

    SQL開窗函數(shù)的具體實現(xiàn)詳解

    這篇文章主要介紹了SQL開窗函數(shù)的具體實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • sql中<![CDATA[]]>的具體使用詳解

    sql中<![CDATA[]]>的具體使用詳解

    使用動態(tài)SQL時,如果if、foreach、where等標(biāo)簽一但被 <![CDATA[ ]]>標(biāo)簽包裹,本文主要介紹了sql中<![CDATA[]]>的具體使用詳解,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • SQL?Server2000在win10上安裝的方法圖文教程

    SQL?Server2000在win10上安裝的方法圖文教程

    Win10本身是一個兼容性較好的操作系統(tǒng),有很多人在咨詢?nèi)绾卧赪indows 10上安裝SQL Server 2000數(shù)據(jù)庫,都沒有成功過,這篇文章主要給大家介紹了關(guān)于SQL?Server2000在win10上安裝的方法,需要的朋友可以參考下
    2024-05-05
  • sql下三種批量插入數(shù)據(jù)的方法

    sql下三種批量插入數(shù)據(jù)的方法

    本文將介紹三種批量插入數(shù)據(jù)的方法,需要的朋友可以參考下
    2013-10-10
  • SQL Server 中的數(shù)據(jù)類型隱式轉(zhuǎn)換問題

    SQL Server 中的數(shù)據(jù)類型隱式轉(zhuǎn)換問題

    這篇文章主要介紹了SQL Server 中的數(shù)據(jù)類型隱式轉(zhuǎn)換問題,本文給大家介紹的非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • sql表連接查詢使用方法(sql多表連接查詢)

    sql表連接查詢使用方法(sql多表連接查詢)

    表連接就是通過關(guān)聯(lián)多張表,從而檢索出需要的數(shù)據(jù)的方法,下面我們通過代碼示例來學(xué)習(xí)一下sql的表連接使用方法
    2014-01-01
  • SQL Server 分頁編號的另一種方式【推薦】

    SQL Server 分頁編號的另一種方式【推薦】

    這篇文章主要介紹了SQL Server 分頁編號的另一種方式,需要的朋友可以參考下
    2018-06-06
  • SQL語句的基本語法

    SQL語句的基本語法

    SQL語句的基本語法...
    2006-08-08
  • SQL SERVER性能優(yōu)化綜述(很好的總結(jié),不要錯過哦)

    SQL SERVER性能優(yōu)化綜述(很好的總結(jié),不要錯過哦)

    一個系統(tǒng)的性能的提高,不單單是試運行或者維護(hù)階段的性能調(diào)優(yōu)的任務(wù),也不單單是開發(fā)階段的事情,而是在整個軟件生命周期都需要注意,進(jìn)行有效工作才能達(dá)到的。所以我希望按照軟件生命周期的不同階段來總結(jié)數(shù)據(jù)庫性能優(yōu)化相關(guān)的注意事項。
    2008-09-09

最新評論

怀柔区| 平湖市| 大洼县| 科技| 堆龙德庆县| 富民县| 荃湾区| 洛扎县| 武穴市| 怀来县| 凌云县| 本溪| 韶山市| 射阳县| 昌宁县| 安吉县| 华宁县| 金阳县| 北流市| 裕民县| 凤城市| 长泰县| 巧家县| 芷江| 临漳县| 新安县| 沙坪坝区| 南川市| 万州区| 革吉县| 五寨县| 普兰店市| 商都县| 腾冲县| 广河县| 和平区| 馆陶县| 兰州市| 桑植县| 神池县| 边坝县|