在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...