用事務更新庫存表 題目如下 哪位大佬能給出代碼
uj5u.com熱心網友回復:
ALTER TRIGGER [dbo].[UpDate_GG]
ON [dbo].[GG]
FOR UPDATE
if UPDATE([數量])
update T1 set T1.[數量]=T1.[數量]+inserted.[數量] from T1,inserted where T1.[編號]=inserted.[編號]
GG表做個觸發器.大概就是這個意思.
uj5u.com熱心網友回復:
謝謝 但是這個是用觸發器 用事務怎么寫呢 begin......end update這種uj5u.com熱心網友回復:
----原文來自 https://blog.csdn.net/laizhixue/article/details/100729016
---開啟事務
begin tran
--錯誤撲捉機制,看好啦,這里也有的。并且可以嵌套。
begin try
--陳述句正確
insert into lives (Eat,Play,Numb) values ('豬肉','足球',1)
--Numb為int型別,出錯
insert into lives (Eat,Play,Numb) values ('豬肉','足球','abc')
--陳述句正確
insert into lives (Eat,Play,Numb) values ('狗肉','籃球',2)
end try
begin catch
select Error_number() as ErrorNumber, --錯誤代碼
Error_severity() as ErrorSeverity, --錯誤嚴重級別,級別小于10 try catch 捕獲不到
Error_state() as ErrorState , --錯誤狀態碼
Error_Procedure() as ErrorProcedure , --出現錯誤的存盤程序或觸發器的名稱。
Error_line() as ErrorLine, --發生錯誤的行號
Error_message() as ErrorMessage --錯誤的具體資訊
if(@@trancount>0) --全域變數@@trancount,事務開啟此值+1,他用來判斷是有開啟事務
rollback tran ---由于出錯,這里回滾到開始,第一條陳述句也沒有插入成功。
end catch
if(@@trancount>0)
commit tran --如果成功Lives表中,將會有3條資料。
--表本身為空表,ID ,Numb為int 型別,其它為nvarchar型別
select * from lives
uj5u.com熱心網友回復:
UPDATE T1 SET 數量=數量+B.數量FROM GG B
WHERE T1.編號=B.編號
uj5u.com熱心網友回復:
begin transactioninsert into Test(編號,數量)
select distinct 編號,0
from CG where not exists(select 1 from Test where Test.編號=CG.編號)
update a set a.數量=isnull(a.數量,0)+b.數量
from Test a,
(
select sum(數量) 數量,編號 from CG
group by 編號
)b
where a.編號=b.編號
delete from CG
commit transaction
uj5u.com熱心網友回復:
直接放在一個存盤程序里,比你現在用觸發器好多了。如果客戶端用批量更新,你這個觸發器就有可能把服務器給拖死了begin try
begin transaction
insert into GG ()
update 庫存 set ....
commit transaction
end try
begin catch
if @@TRANCOUNT>0
rollback transaction
raiseerror('情人節快到了',16,1)
end catch
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/12932.html
標籤:應用實例
下一篇:關于奇偶數排序的問題
