SqlServer儲存過程中使用事務,示例

2022-02-14 20:37:18 字數 1628 閱讀 7782

create proc pro_getprotrans

@goodsid

int,

@number

int,

@stockprice money,

@supplierid

int,

@empid

int,

@stockunit varchar(

50),

@stockdate datetime,

@totalmoney money ,

@actmoney money ,

@baseid

int,

@description nvarchar(

255)

asdeclare @error

int =0 --事務中操作的錯誤記錄

--開啟事務

begin transaction

--實現進貨資訊的新增

insert into stockinfo values(@goodsid, @number, @stockprice, @supplierid, @empid, @stockunit, @stockdate, @totalmoney, @actmoney,default,@description, @baseid)

set @error+=@@error --記錄有可能產生的錯誤號

--獲取當前進貨資訊的標識列

--判斷當前商品有沒有進貨記錄

if exists (select * from dbo.inventoryinfo where goodid=@goodsid) --說明記錄存在,直接修改庫存數量

begin

update dbo.inventoryinfo

set gnumber=gnumber+@number,totalmoney+=@totalmoney where goodid=@goodsid

set @error+=@@error --記錄有可能產生的錯誤號

end

else --這個商品從來沒有過進貨記錄,那麼就應該新增新的存在資訊

begin

declare @gwarningnum

int --此商品的預警數量

--獲取預警數量

set @gwarningnum=(select waringnum from dbo.goodsinfo where gid=@goodsid)

insert into dbo.inventoryinfo values(@goodsid,@number,@baseid,@gwarningnum,@totalmoney,

'第一次進貨

',default

)

set @error+=@@error --記錄有可能產生的錯誤號

end--判斷事務的提交或者回滾

if(@error<>0

) begin

rollback transaction

return -1 --設定操作結果錯誤標識

endelse

begin

commit transaction

return

1 --操作成功的標識

endgo

SQL SERVER儲存過程中使用事務

儲存過程格式 create procedure yourprocedure asbegin set nocount on begin try 開始捕捉異常 bein tran 開始事務 update a set a.names b.names from t1 as a inner join t2 a...

在SQL Server儲存過程中使用事務及返回值

1 create procedure testtran23 as45declare userid int6 7set nocount on8 9begin tran adduser 1011 insert into testtable username,password,email values m...

儲存過程中使用隔離級別

set transaction isolation level 控制由連線發出的所有 microsoft sql server select 語句的預設事務鎖定行為。語法 set transaction isolation level 引數 read committed 指定在讀取資料時控制共享鎖以...