我有两个表 ,A表的的一列改变了,B表的一列也要随之改变
但是 修改的时候可以触发,新增的时候没反应,删除的时候,B表的该行没有减去相应的数据,而是变成null,相当于减完了
各位帮我看看,感觉好像没错
ALTER trigger [trigger_HR_CBYS]
on [dbo].[HR_CBYS_Detail]
for insert,delete,update asdeclare
@ysdt_id int,--从表主键
@ys_id nvarchar(50),--外键
@old_totle_ys decimal(18,2),--旧数据
@new_totle_ys decimal(18,2),--新数据
@ys_money decimal(18,2)--主表的数据--从删除表里查
select @ysdt_id=YSDt_ID,@ys_id=YS_ID,@old_totle_ys=Totle_YS from deleted;
--查出旧的预算总额
select @ys_money=YS_money from HR_CBYS where YS_ID=@ys_id;if(@ysdt_id=null)--新增
begin
--从新增表里查
select @ys_id=YS_ID,@new_totle_ys=Totle_YS from inserted;
update HR_CBYS set YS_money=YS_money+@new_totle_ys where YS_ID=@ys_id;
end
else
begin
--从新增表里查
select @new_totle_ys=Totle_YS from inserted;
if(@new_totle_ys=null)--删除
begin
update HR_CBYS set YS_money=YS_money-@old_totle_ys where YS_ID=@ys_id;
end
else--修改
begin
update HR_CBYS set YS_money=YS_money-@old_totle_ys+@new_totle_ys where YS_ID=@ys_id;
end
end
但是 修改的时候可以触发,新增的时候没反应,删除的时候,B表的该行没有减去相应的数据,而是变成null,相当于减完了
各位帮我看看,感觉好像没错
ALTER trigger [trigger_HR_CBYS]
on [dbo].[HR_CBYS_Detail]
for insert,delete,update asdeclare
@ysdt_id int,--从表主键
@ys_id nvarchar(50),--外键
@old_totle_ys decimal(18,2),--旧数据
@new_totle_ys decimal(18,2),--新数据
@ys_money decimal(18,2)--主表的数据--从删除表里查
select @ysdt_id=YSDt_ID,@ys_id=YS_ID,@old_totle_ys=Totle_YS from deleted;
--查出旧的预算总额
select @ys_money=YS_money from HR_CBYS where YS_ID=@ys_id;if(@ysdt_id=null)--新增
begin
--从新增表里查
select @ys_id=YS_ID,@new_totle_ys=Totle_YS from inserted;
update HR_CBYS set YS_money=YS_money+@new_totle_ys where YS_ID=@ys_id;
end
else
begin
--从新增表里查
select @new_totle_ys=Totle_YS from inserted;
if(@new_totle_ys=null)--删除
begin
update HR_CBYS set YS_money=YS_money-@old_totle_ys where YS_ID=@ys_id;
end
else--修改
begin
update HR_CBYS set YS_money=YS_money-@old_totle_ys+@new_totle_ys where YS_ID=@ys_id;
end
end
==>
if(@ysdt_id is null)
set YS_money=YS_money-@old_totle_ys ==>
set YS_money=isnull(YS_money,0)
-isnull(@old_totle_ys ,0)
on [dbo].[HR_CBYS_Detail]
for insert,delete,update asdeclare
@ysdt_id int,
@ys_id nvarchar(50),
@old_totle_ys decimal(18,2),
@new_totle_ys decimal(18,2),
@ys_money decimal(18,2)--从删除表里查
select @ysdt_id=YSDt_ID,@ys_id=YS_ID,@old_totle_ys=Totle_YS from deleted;
--查出旧的预算总额
select @ys_money=YS_money from HR_CBYS where YS_ID=@ys_id;if(@ysdt_id is null)--新增
begin
--从新增表里查
select @ys_id=YS_ID,@new_totle_ys=Totle_YS from inserted;
update HR_CBYS set YS_money=YS_money+@new_totle_ys where YS_ID=@ys_id;
end
else
begin
--从新增表里查
select @new_totle_ys=Totle_YS from inserted;
if(@new_totle_ys is null)--删除
begin
update HR_CBYS set YS_money=isnull(YS_money,0)-isnull(@old_totle_ys,0) where YS_ID=@ys_id;
end
else--修改
begin
update HR_CBYS set YS_money=isnull(YS_money,0)-isnull(@old_totle_ys,0)+@new_totle_ys where YS_ID=@ys_id;
end
end
改后代码,但仍然和前面的一样
恳求 慕白兄 在看看
可以了
但是 如果
select @ys_money=YS_money from HR_CBYS where YS_ID=@ys_id;
YS_money 开始为空的话,即null,那么 新增和删除就不可以执行