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 ...
SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。...
Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同,触发器执行完成后,与该触发器...
总结常用基本点如下: 1、触发器有两种... 2、DML触发器分类:Insert触发器、Delete触发器、Update触发器、上面任意类型混合。 3、触发器创建语法: 代码如下: CREATE TRIGGER <trigger> ON <table> {{{FOR|AFTER} <
SQL Server2000提供了两种触发器:“Instead of” 和“After” 触发器。 一个表或视图的每一个修改动作(Insert、Update和Delete)都可以有一个“Instead of” 触发器,一个表的每个修改动作都可以有多个“After”...
SQLServer考试题及答案 选择题: 1、在MS SQL Server中,用来显示数据库信息的系统存储过程是( ) A sp_ dbhelp B sp_ db C sp_ help D sp_ helpdb 2、SQL语言中,删除一个表的命令是( ) A DELETE B DROP C ...
AFTER INSERT, UPDATE AS BEGIN UPDATE Dept_age SET Avg_age = ( SELECT AVG(Sage) FROM Student WHERE Student. Sdept = Dept_age. Sdept) WHERE Sdept IN ( SELECT Sdept FROM inserted ); INSERT INTO ...
代码如下: create trigger TR_MasterTable_Update on MasterTable after update as if update ([Type])–当Type字段被更新时,才会触发此触发器 insert into MasterLogTable select Id ,(Case [Type] when 1 then ...
目录 SQL语法 2 数据库 5 创建数据文件 5 修改数据库 6 删除 7 数据表 8 判断数据库中的某表是否存在,存在删除该表 8 修改表语法 8 ... 使用触发器方法其一 —— 判断 24 数据库备份和恢复 25
触发器体内的SELECT 语句只能为SELECT … INTO …结构,或者为定义游标所使用的SELECT 语句。 触发器中不能使用数据库事务控制语句 COMMIT; ROLLBACK, SVAEPOINT 语句; 由触发器所调用的过程或函数也不能...
语法:Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH <dml> [ ,…n ] ] { FOR | AFTER | ...
乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,...
触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。 触发器分为两种...
代码如下:— Create a log table CREATE TABLE TriggerLog (LogInfo xml) — Create a dummy table to delete later on CREATE TABLE TableToDelete (Id int PRIMARY KEY) — 新建一个新表,作为删除实验表 INSERT ...
(6)在一个单独的表上,最多只能创建三个触发器与之关联,一个INSERT触发器,一个DELETE触发器和一个UPDATE触发器。 1. 实例讲解Oracle数据库自带的几个触发器 Oracle数据库自带的几个触发器(最简单触发器格式)...
附录 2 SQL Server 数据库命名与编码规范 一.数据库对象命名基本规范 1. 总体命名规范 名称的长度不超过 32 个字符。 名称采用英文单词、英文单词缩写和数字,单词之间用"_"分隔。 说明:除非用户提供文档化的行业...
提示:索引保存在information_schema数据库里的STATISTICS表中。 创建索引方式: 自动:当表上定义主键约束、唯一、外键约束时,该表会被系统自动添加上索引。 手动:手动在相关表或列上增加索引,提高查询速度。 ...