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
分享到:
相关推荐
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
在SQL Server 2005中,触发器是一种特殊的存储过程,它在特定的数据操作语言(DML)事件,如INSERT、UPDATE或DELETE发生时自动执行。触发器可以帮助实现复杂的业务规则和数据完整性,通过扩展SQL语句的功能,提供了...
一个简单的AFTER INSERT触发器,当向表中插入新数据时,自动更新另一个关联表: ```sql CREATE TRIGGER trg_AfterInsertExample ON Table1 AFTER INSERT AS BEGIN INSERT INTO Table2 (Column1) SELECT ...
SQL Server 2005中的触发器是一种数据库对象,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为DML(数据操纵语言)事件,触发器则提供了对这些事件的响应...
* CREATE TRIGGER trigger_name AFTER/BEGIN/INSTEAD OF {INSERT|DELETE|UPDATE} ON tbl_name FOR EACH ROW ... 游标(Cursor) 游标是一种临时的工作单元,它可以在存储过程中使用,用于处理大量数据。游标的优点...
### SQL Server 创建触发器实现远程服务器相应执行SQL语句 #### 概述 本文将详细介绍如何在SQL Server中创建触发器来实现当本地数据库发生数据插入时,在远程服务器上相应地执行SQL语句,实现数据同步。这通常用于...
### SqlServer触发器详解与案例分析 #### 一、触发器概述 触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者...
### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...
在SQL Server 2000中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器是数据库规则和约束的扩展,可以用于实现更复杂的业务逻辑,确保数据的完整性和一致性...
SQL Server 2000 支持两种类型的触发器:Instead Of 触发器和 After 触发器。 - **Instead Of 触发器**:这种类型的触发器用于替代引起触发器执行的T-SQL语句。它可以用于表和视图,以扩展视图可以支持的更新操作。 ...
在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...
删除触发器使用DROP TRIGGER语句: ```sql DROP TRIGGER trigger_name; ``` 这将永久性地移除指定的触发器,如果不再需要某个触发器,应使用此命令。 总结,SQL Server 2005中的触发器是数据库设计的重要组成部分...
以下是一个简单的INSERT触发器示例: ```sql CREATE TRIGGER trg_InsertExample ON TableName AFTER INSERT AS BEGIN -- 触发器操作代码 END; ``` 这个触发器将在TableName上的INSERT操作完成后执行。 三、触发器...
- 在一个示例中,我们可以创建一个INSERT触发器,确保每当向员工表插入新记录时,都会自动计算员工的入职年份。 - 另一个例子是使用UPDATE触发器来实现参照完整性的级联更新,当父表的某个字段更改时,自动更新...
这个资源“第05节:SQLServer触发器Demo源代码.rar”很可能是包含了一个C#项目,该项目演示了如何在应用程序中创建、使用和管理SQL Server触发器。通过学习和理解这些示例代码,开发者可以更好地掌握在C#环境中操作...
在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的...
本文将详细介绍 SQL Server 触发器的语法和使用方法。 一、Create TRIGGER 语句 Create TRIGGER 语句是用于创建触发器的语句。其基本语法如下所示: Create TRIGGER trigger_name ON { table | view } [ WITH ...
综上,SQL Server的存储过程和触发器是数据库编程的重要组成部分,掌握它们的使用可以帮助我们更高效地管理和维护数据库。通过做相关的习题,不仅可以巩固理论知识,还能提升实际操作技能。对于初学者而言,从基础...