触发器

USE [UFDATA_010_2013]
GO
/****** Object:  Trigger [dbo].[prodb_trigger]    Script Date: 03/12/2016 08:47:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[prodb_trigger] on [dbo].[PRO_Db_b]
for insert,update,delete
as
begin
    declare @inserted int,
            @deleted int,
            @startdate datetime,
            @enddate datetime,
            @depcode nvarchar(50),
            @distributecotton nvarchar(512),
            @dbqty float,
            @dbqtyback float
    select @inserted=COUNT(*) from inserted
    select @deleted=COUNT(*) from deleted
   
    if @inserted>0 and @deleted=0
    begin
        --insert
        select @startdate=startdate,@enddate=enddate,@depcode=depcode,@dbqty=dbqty,@distributecotton=distributecotton from  inserted;
        update a set a.qtysum=a.qtysum+@dbqty from PRO_Element_b a,PRO_Element b where b.id=a.element_id and b.elementdate>=@startdate and b.elementdate<=@enddate and b.depcode=@depcode and a.distributecotton=@distributecotton
    end
    else if @inserted>0 and @deleted>0
    begin
        --update
        select @startdate=startdate,@enddate=enddate,@depcode=depcode,@dbqty=dbqty,@distributecotton=distributecotton from  inserted;
        select @dbqtyback=dbqty from  deleted;
        update a set a.qtysum=a.qtysum+@dbqty-@dbqtyback from PRO_Element_b a,PRO_Element b where b.id=a.element_id and b.elementdate>=@startdate and b.elementdate<=@enddate and b.depcode=@depcode and a.distributecotton=@distributecotton
    end
    else if @inserted=0 and @deleted>0
    begin  
        --delete
        select @startdate=startdate,@enddate=enddate,@depcode=depcode,@dbqty=dbqty,@distributecotton=distributecotton from  deleted;
        update a set a.qtysum=a.qtysum-@dbqty from PRO_Element_b a,PRO_Element b where b.id=a.element_id and b.elementdate>=@startdate and b.elementdate<=@enddate and b.depcode=@depcode and a.distributecotton=@distributecotton
    end
end

posted @ 2016-03-12 09:29  一锤定音  阅读(246)  评论(0编辑  收藏  举报