`
中华好儿孙
  • 浏览: 68725 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sqlserver里的after insert触发器,使用游标版

    博客分类:
  • sql
阅读更多
CREATE TRIGGER [dbo].[actStatisticsTrigger_actObj_insert]
ON [dbo].[gl_activity_customer]
AFTER INSERT
AS
  DECLARE @assignId NVARCHAR(32) --活动执行人
  DECLARE @actObjCount NUMERIC(5) --统计变量
  DECLARE @actDate NVARCHAR(8)  --活动当天日期
  DECLARE @dayInWeek NVARCHAR(1) --活动当天是周几
  DECLARE @myFlag NVARCHAR(1) --标志

  --找出同一天的同一个活动执行人的銷售活動/開拓準保戶/拜訪影響力中心(C of I)之活動的活动对象总人数
  DECLARE myCursor CURSOR FOR --定义游标
  SELECT t2.assign_id, COUNT(t1.tid),CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week, 'a'
  FROM inserted t1 inner join gl_activity t2 ON t1.activity_id = t2.tid 
       AND t2.type_a = 'AGY_STD__10' AND t2.type_b = 'AGY_STD__1002' AND t2.type_c = 'AGY_STD__100201' 
       AND t2.active_state = 'done' AND t2.status = '1' AND t1.status = '1'
  GROUP BY t2.assign_id, CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week
  UNION ALL
  --找出同一天的同一个活动执行人的AGY和STD通路下的所有活動的所有活动对象的推介人数的总人数
  SELECT t2.assign_id, COUNT(t1.recoperson_num),CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week, 'b'
  FROM inserted t1 inner join gl_activity t2 ON t1.activity_id = t2.tid 
       AND (t2.type_a LIKE '%AGY%' OR t2.type_a LIKE '%STD%')
  GROUP BY t2.assign_id, CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week
  UNION ALL
  --找出同一天的同一个活动执行人的管理及增員活動/增員篩選/轉介紹名單(Ref)之活動所有活动对象的推介人数的总人数
  SELECT t2.assign_id, COUNT(t1.recoperson_num),CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week, 'c'
  FROM inserted t1 inner join gl_activity t2 ON t1.activity_id = t2.tid 
       AND t2.type_a = 'AGY_STD__11' AND t2.type_b = 'AGY_STD__1101' AND t2.type_c = 'AGY_STD__110110' 
       AND t2.active_state = 'done' AND t2.status = '1' AND t1.status = '1'
  GROUP BY t2.assign_id, CONVERT(NVARCHAR(8), t2.active_date, 112),t2.day_in_week

  OPEN myCursor
  
    FETCH NEXT FROM myCursor INTO @assignId, @actObjCount, @actDate, @dayInWeek, @myFlag

    WHILE(@@FETCH_STATUS = 0)
    BEGIN
     IF(@myFlag = 'a' OR @myFlag = 'b')
     BEGIN
       DECLARE @var_count INT
       SELECT @var_count = COUNT(*) FROM gl_activity_sale_statistics WITH(TABLOCKX) WHERE date_now = @actDate AND agent_number = @assignId

       IF(@var_count = 0)
       BEGIN
            DECLARE @yearIn NVARCHAR(4) --活动当天所属年份
            DECLARE @quarterIn NVARCHAR(1) --活动当天所属季度
            DECLARE @monthIn NVARCHAR(2) --活动当天所属月份
            DECLARE @weekIn NVARCHAR(20) --周的标识

            SET @yearIn = DATEPART(yyyy, @actDate)
            SET @quarterIn = DATEPART(q, @actDate)
            SET @monthIn = DATEPART(mm, @actDate)
            SET @weekIn = dbo.getWeekInStr(@actDate)

            IF(CAST(@monthIn AS INT) < 10)
            BEGIN
                 SET @monthIn = '0' + @monthIn
            END
            
            IF(@myFlag = 'a')
            BEGIN
              INSERT INTO gl_activity_sale_statistics(tid, agent_number, year_in, quarter_in, month_in, week_in, day_in, date_now, is_plan, is_edit_byhand, AGY_STD__100201)
              VALUES(replace(newid(),'-',''), @assignId, @yearIn, @quarterIn, @monthIn, @weekIn, @dayInWeek, @actDate, '0', '0', @actObjCount)
            END
            IF(@myFlag = 'b')
            BEGIN
                 INSERT INTO gl_activity_sale_statistics(tid, agent_number, year_in, quarter_in, month_in, week_in, day_in, date_now, is_plan, is_edit_byhand, AGY_STD__A0_rec_people_num)
                 VALUES(replace(newid(),'-',''), @assignId, @yearIn, @quarterIn, @monthIn, @weekIn, @dayInWeek, @actDate, '0', '0', @actObjCount)
            END
       END
       ELSE
       BEGIN
            IF(@myFlag = 'a')
            BEGIN
              UPDATE gl_activity_sale_statistics 
              SET AGY_STD__100201 = ISNULL(AGY_STD__100201, 0) + @actObjCount 
              WHERE agent_number = @assignId AND date_now = @actDate AND is_edit_byhand = '0'
            END
            IF(@myFlag = 'b')
            BEGIN
              UPDATE gl_activity_sale_statistics 
              SET AGY_STD__A0_rec_people_num = ISNULL(AGY_STD__A0_rec_people_num, 0) + @actObjCount 
              WHERE agent_number = @assignId AND date_now = @actDate AND is_edit_byhand = '0'
            END
       END
     END
     
     IF(@myFlag = 'c')
     BEGIN
       DECLARE @var_count2 INT
       SELECT @var_count2 = COUNT(*) FROM gl_activity_emp_statistics WITH(TABLOCKX) WHERE date_now = @actDate AND agent_number = @assignId
       IF(@var_count2 = 0)
       BEGIN
              INSERT INTO gl_activity_emp_statistics(tid, agent_number, year_in, quarter_in, month_in, week_in, day_in, date_now, is_plan, is_edit_byhand, AGY_STD__110110)
              VALUES(replace(newid(),'-',''), @assignId, @yearIn, @quarterIn, @monthIn, @weekIn, @dayInWeek, @actDate, '0', '0', @actObjCount)
       END
       ELSE
       BEGIN
              UPDATE gl_activity_emp_statistics 
              SET AGY_STD__110110 = ISNULL(AGY_STD__110110, 0) + @actObjCount 
              WHERE agent_number = @assignId AND date_now = @actDate AND is_edit_byhand = '0'
       END
     END

       FETCH NEXT FROM myCursor INTO @assignId, @actObjCount, @actDate, @dayInWeek, @myFlag
    END

  CLOSE myCursor



  
GO
分享到:
评论

相关推荐

    sqlserver 触发器学习(实现自动编号)

    在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...

    基于sql server 2005的触发器的创建及操作

    在SQL Server 2005中,触发器是一种特殊的存储过程,它在特定的数据操作语言(DML)事件,如INSERT、UPDATE或DELETE发生时自动执行。触发器可以帮助实现复杂的业务规则和数据完整性,通过扩展SQL语句的功能,提供了...

    SQLserver08触发器

    一个简单的AFTER INSERT触发器,当向表中插入新数据时,自动更新另一个关联表: ```sql CREATE TRIGGER trg_AfterInsertExample ON Table1 AFTER INSERT AS BEGIN INSERT INTO Table2 (Column1) SELECT ...

    16.sql.server.2005.触发器 16.sql.server.2005.触发器

    SQL Server 2005中的触发器是一种数据库对象,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为DML(数据操纵语言)事件,触发器则提供了对这些事件的响应...

    MYSQL数据库高级应用宝典含实例(索引、视图、触发器、游标和存储过程)

    * CREATE TRIGGER trigger_name AFTER/BEGIN/INSTEAD OF {INSERT|DELETE|UPDATE} ON tbl_name FOR EACH ROW ... 游标(Cursor) 游标是一种临时的工作单元,它可以在存储过程中使用,用于处理大量数据。游标的优点...

    sqlserver 创建触发器 远程服务器相应执行SQL语句

    ### SQL Server 创建触发器实现远程服务器相应执行SQL语句 #### 概述 本文将详细介绍如何在SQL Server中创建触发器来实现当本地数据库发生数据插入时,在远程服务器上相应地执行SQL语句,实现数据同步。这通常用于...

    SqlServer触发器写法案例

    ### SqlServer触发器详解与案例分析 #### 一、触发器概述 触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者...

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    SqlServer2000触发器

    在SQL Server 2000中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器是数据库规则和约束的扩展,可以用于实现更复杂的业务逻辑,确保数据的完整性和一致性...

    sqlserver触发器例子

    SQL Server 2000 支持两种类型的触发器:Instead Of 触发器和 After 触发器。 - **Instead Of 触发器**:这种类型的触发器用于替代引起触发器执行的T-SQL语句。它可以用于表和视图,以扩展视图可以支持的更新操作。 ...

    SQL Server常用操作触发器、存储过程.rar

    在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...

    sql server 2005第十二课(sql server触发器)

    删除触发器使用DROP TRIGGER语句: ```sql DROP TRIGGER trigger_name; ``` 这将永久性地移除指定的触发器,如果不再需要某个触发器,应使用此命令。 总结,SQL Server 2005中的触发器是数据库设计的重要组成部分...

    SQL SERVER 触发器视频讲解

    以下是一个简单的INSERT触发器示例: ```sql CREATE TRIGGER trg_InsertExample ON TableName AFTER INSERT AS BEGIN -- 触发器操作代码 END; ``` 这个触发器将在TableName上的INSERT操作完成后执行。 三、触发器...

    sql server触发器.rar

    - 在一个示例中,我们可以创建一个INSERT触发器,确保每当向员工表插入新记录时,都会自动计算员工的入职年份。 - 另一个例子是使用UPDATE触发器来实现参照完整性的级联更新,当父表的某个字段更改时,自动更新...

    第05节:SQLServer触发器Demo源代码.rar

    这个资源“第05节:SQLServer触发器Demo源代码.rar”很可能是包含了一个C#项目,该项目演示了如何在应用程序中创建、使用和管理SQL Server触发器。通过学习和理解这些示例代码,开发者可以更好地掌握在C#环境中操作...

    SQL Server 利用触发器对多表视图进行更新的实现方法

    在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的...

    SQLServer触发器语法.pdf

    本文将详细介绍 SQL Server 触发器的语法和使用方法。 一、Create TRIGGER 语句 Create TRIGGER 语句是用于创建触发器的语句。其基本语法如下所示: Create TRIGGER trigger_name ON { table | view } [ WITH ...

    SQL server存储过程习题,SQL触发器习题.rar

    综上,SQL Server的存储过程和触发器是数据库编程的重要组成部分,掌握它们的使用可以帮助我们更高效地管理和维护数据库。通过做相关的习题,不仅可以巩固理论知识,还能提升实际操作技能。对于初学者而言,从基础...

Global site tag (gtag.js) - Google Analytics