触发器 回滚问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 22:09:37
Create trigger chebuding_insert
On qk_chebuding
for insert
As
declare @fenshu int
declare @kanhao varchar(20)
declare @kehuhao varchar(20)
declare @qishu varchar(20)
declare @niandu varchar(20)
select @fenshu=fenshu,@kanhao=kanhao,@kehuhao=danweidaima,@qishu=kanqi,@niandu=niandu from inserted
update dingshuzongbiao set chebudingshu=chebudingshu+@fenshu
Where dingshuzongbiao.kanhao=@kanhao and dingshuzongbiao.qishu=@qishu and dingshuzongbiao.niandu=@niandu
update fenjianbiao set yudingshu=yudingshu+@fenshu
where fenjianbiao.kanhao=@kanhao and fenjianbiao.kehuhao=@kehuhao and fenjianbiao.qishu=@qishu and fenjianbiao.niandu=@niandu
这个触发器当2个update失败的时候要求回滚全部操作,就是insert操作也回滚。!!怎么写?最好抛出一个前台catch能接收到的错误!!
我用的vs2005,asp.net 大侠们!
-----instead of 的 就 属于 前触发器-------写成这种的 我的insert就永远不会执行的吧?
那不行的1

Create trigger chebuding_insert
On qk_chebuding
for insert
As
begin
declare @fenshu int
declare @kanhao varchar(20)
declare @kehuhao varchar(20)
declare @qishu varchar(20)
declare @niandu varchar(20)
select @fenshu=fenshu,@kanhao=kanhao,@kehuhao=danweidaima,@qishu=kanqi,@niandu=niandu from inserted
-- 在此插入一个判断即可:
if (@kanhao not in(select kanhao from dingshuzongbiao)) or (@qishu not in(select qishu from dingshuzongbiao)) or (@niandu not in(select niandu from dingshuzongbiao)) or (@kanhao not in(select kanhao from fenjianbiao)) or (@kehuhao not in(select kehuhao from fenjianbiao)) or (@qishu not in(select qishu from fenjianbiao)) or (@niandu not in(select niandu from fenjianbiao))
begin
rollback transaction
print '数据插入失败,更新取消!'
end
else
begin
update dingshuzongbiao set chebudingshu=chebudingshu+@fenshu
Where dingshuzongbiao.kanhao=@kanhao and dingshuzongbiao