统计触发器

USE [CZJXC]
GO
/****** Object:  Trigger [dbo].[tg_StgImpOrderWriteoffVersion]    Script Date: 04/24/2012 10:53:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        By template generator
-- Create date: 2012-4-24
-- Description:    仓库: 入库单-核销信息
-- =============================================
ALTER TRIGGER [dbo].[tg_StgImpOrderWriteoffVersion]
   ON  [dbo].[STG_ImpOrderWriteoff] 
   AFTER INSERT,UPDATE,DELETE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @opeFlag NVARCHAR(1)
    
    SET @opeFlag = ''''
    
    IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted) SET @opeFlag = ''I''
    IF EXISTS(SELECT 1 FROM inserted A JOIN deleted B ON A.id=B.id) SET @opeFlag = ''U''
    IF EXISTS(SELECT 1 FROM deleted) AND NOT EXISTS(SELECT 1 FROM inserted) SET @opeFlag = ''D''
        
    IF (@opeFlag = ''U'')
    BEGIN
        -- <<<================    更新本表的时间戳    ===============>>>
        UPDATE [dbo].[STG_ImpOrderWriteoff] 
        SET 
            modifyDate = CURRENT_TIMESTAMP
        FROM Inserted i
        WHERE [dbo].[STG_ImpOrderWriteoff].id = i.id        
    END
    ELSE IF (@opeFlag = ''I'')
    BEGIN
        -- <<<================    更新本表的时间戳    ===============>>>
        UPDATE [dbo].[STG_ImpOrderWriteoff]
        SET 
            createDate = CURRENT_TIMESTAMP
            ,modifyDate = CURRENT_TIMESTAMP
        FROM Inserted i
        WHERE [dbo].[STG_ImpOrderWriteoff].id = i.id
    END
    

    -- <<<================     begin 业务逻辑处理    ================>>>
    
        ---- 反写统计信息(删除/更新情况下)
        IF(@opeFlag = ''U'' or @opeFlag = ''D'' )
        BEGIN
            UPDATE dbo.STG_ImpOrder
            SET 
                totalWriteoffFee=SUM_newWriteoffAmt
            FROM
            (
                SELECT 
                     C.impOrderId impOrderId,
                      SUM(ISNULL(B.newWriteoffAmt,0)) SUM_newWriteoffAmt
                FROM dbo.STG_ImpOrderWriteoff B
                RIGHT JOIN
                (
                    SELECT DISTINCT(impOrderId) AS impOrderId 
                    FROM deleted 
                ) C
                ON B.impOrderId = C.impOrderId
                GROUP BY C.impOrderId
            ) D
            WHERE STG_ImpOrder.id = D.impOrderId 
        END
        -- 反写统计信息(新增/更新情况下)
        ELSE IF(@opeFlag = ''I'')
        BEGIN
            UPDATE dbo.STG_ImpOrder
            SET 
                totalWriteoffFee=SUM_newWriteoffAmt
            FROM
            (
                SELECT 
                     C.impOrderId impOrderId,
                      SUM(ISNULL(B.newWriteoffAmt,0)) SUM_newWriteoffAmt
                FROM dbo.STG_ImpOrderWriteoff B
                INNER JOIN
                (
                    SELECT DISTINCT(impOrderId) AS impOrderId 
                    FROM inserted 
                ) C
                ON B.impOrderId = C.impOrderId
                GROUP BY C.impOrderId
            ) D
            WHERE STG_ImpOrder.id = D.impOrderId 
        END
    
    -- <<<================     end 业务逻辑处理      ================>>>
        
END

 

posted @ 2013-01-25 16:48  xust  阅读(131)  评论(0)    收藏  举报