我有两个表 ,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

解决方案 »

  1.   

    if(@ysdt_id=null)--新增 
    ==>
    if(@ysdt_id is null)
      

  2.   

    下面也是 if(@new_totle_ys=null)--删除
      

  3.   

    还有减的时候如果存在为null的情况下转换
     set YS_money=YS_money-@old_totle_ys ==>
     set YS_money=isnull(YS_money,0) 
    -isnull(@old_totle_ys ,0)
      

  4.   

    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 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
    改后代码,但仍然和前面的一样
    恳求 慕白兄 在看看
      

  5.   


    可以了
    但是 如果
    select @ys_money=YS_money from HR_CBYS where YS_ID=@ys_id;
    YS_money 开始为空的话,即null,那么 新增和删除就不可以执行
      

  6.   

    select @ys_money=ISNULL(YS_money,0)  from HR_CBYS where YS_ID=@ys_id;