MSSQL資料庫巢狀儲存過程的事務控制

2021-05-10 04:02:40 字數 1226 閱讀 4833

在mssql規範中,支援事務巢狀,不過在巢狀呼叫子儲存過程時,要回滾事務,需把@@error傳給最外層事務。舉例如下:

drop table testtb

gocreate table testtb

(id int,name varchar(2))go

--子過程

drop proc proc_insert_sub

gocreate proc proc_insert_sub

@errresult int out--返回錯誤值

as begin

declare @errsum int

declare @transname varchar(20)

set @transname='subtran'

set @errsum=0

--正確資料

insert testtb values(1,'00')

set @errsum=@errsum+@@error

--錯誤資料

insert testtb values(2,'222')

set @errsum=@errsum+@@error

--正確資料

insert testtb values(1,'11')

set @errsum=@errsum+@@error

set @errresult=@errsum

endgo

--主過程

drop proc proc_insert

gocreate proc proc_insert

as begin

declare @errsum int

declare @errsum1 int

set @errsum=0

set @errsum1=0

begin tran

exec proc_insert_sub @errsum1 out

print @errsum1

set @errsum=@errsum+@errsum1

print @errsum

print @@trancount

if @errsum=0

commit tran

else

rollback transaction  

endgo

/*執行

exec proc_insert

select * from testtb

*/

MSSQL資料庫 儲存過程學習

這個例子裡面我們從兩個表中取出頭兩行,然後合併到乙個表中。在現實中我們常常會遇到這樣的情況,在乙個資料庫中存在兩個表,假設表1儲存著公司個產品本季度銷售資訊,表2儲存著公司本季度欠款金額情況。在乙個頁面中我們想把這兩個資訊顯示出來。通常的做法是在程式中進行兩次sql查詢,返回兩個結果集,在分別顯示出...

MSSQL資料庫 儲存過程學習

這個例子裡面我們從兩個表中取出頭兩行,然後合併到乙個表中。在現實中我們常常會遇到這樣的情況,在乙個資料庫中存在兩個表,假設表1儲存著公司個產品本季度銷售資訊,表2儲存著公司本季度欠款金額情況。在乙個頁面中我們想把這兩個資訊顯示出來。通常的做法是在程式中進行兩次sql查詢,返回兩個結果集,在分別顯示出...

資料庫 儲存過程

儲存過程,stored procedure,是在大型資料庫系統中,一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。模擬於c中的函式。mysql與sqlserver是不同的。建立儲存過程 conn getconnec...