CREATE TRIGGER [dbo].[actStatisticsTrigger_insert]ON [dbo].[gl_activity]AFTER INSERTASDECLARE @counntOfInsert INT--考虑到一条insert语句插入多条记录的情况SELECT @counntOfInsert = COUNT(*) FROM insertedWHILE(@counntOfInsert > 0)BEGINDECLARE @firstRankType NVARCHAR(40) --第一级的活动类型DECLARE @secondRankType NVARCHAR(40) --第二级的活动类型DECLARE @thirdRankType NVARCHAR(40) --第三极的活动类型DECLARE @activeDate NVARCHAR(8) --活动举行的日期 字符串,不带-的YYYYMMDD形式DECLARE @activeHours NUMERIC(4,1) --活动持续的小时数,精确到小数点后一位DECLARE @assignId NVARCHAR(32) --活动执行人DECLARE @dayInWweek NVARCHAR(1) --活动所在的日期是周几DECLARE @actState NVARCHAR(20)DECLARE @actStatus NVARCHAR(2)SELECT @actStatus = tt.status, @actState = tt.active_state, @firstRankType = tt.type_a, @secondRankType = tt.type_b, @thirdRankType = tt.type_c, @activeDate = CONVERT(NVARCHAR(8), tt.active_date, 112), @activeHours = tt.active_hours, @assignId = tt.assign_id, @dayInWweek = tt.day_in_week FROM inserted tt WHERE (SELECT COUNT(*) FROM inserted tmp WHERE tmp.tid <= tt.tid ) = @counntOfInsertDECLARE @yearIn NVARCHAR(4) --活动当天所属年份DECLARE @quarterIn NVARCHAR(1) --活动当天所属季度DECLARE @monthIn NVARCHAR(2) --活动当天所属月份DECLARE @weekIn NVARCHAR(20) --周的标识SET @yearIn = DATEPART(yyyy, @activeDate)SET @quarterIn = DATEPART(q, @activeDate)SET @monthIn = DATEPART(mm, @activeDate)SET @weekIn = dbo.getWeekInStr(@activeDate)IF(CAST(@monthIn AS INT) < 10)BEGIN SET @monthIn = '0' + @monthInENDIF(@actStatus = '1' and @actState = 'done')BEGIN --更新gl_activity_time_statistics IF(@firstRankType = 'AGY_STD__10' OR @firstRankType = 'AGY_STD__11' OR ((@firstRankType not like '%AGY%') AND (@firstRankType not like '%STD%'))) BEGIN DECLARE @var_count INT --给时间统计表加锁,不允许别的事务读取和操作这张表,直至本事务结束 SELECT @var_count = COUNT(*) FROM gl_activity_time_statistics WITH(TABLOCKX) WHERE date_now = @activeDate AND agent_number = @assignId IF(@var_count = 0) BEGIN DECLARE @insertSql NVARCHAR(500) DECLARE @insertNewId NVARCHAR(32) SET @insertNewId = replace(newid(),'-','') --sql中用两个单引号来表示一个单引号 SET @insertSql = 'INSERT INTO gl_activity_time_statistics(tid, agent_number, year_in, quarter_in, month_in, week_in, day_in, date_now, is_plan, is_edit_byhand, ' + @secondRankType +' ) values(''' + @insertNewId + ''', ''' + @assignId + ''', ''' + @yearIn + ''', ''' + @quarterIn + ''', ''' + @monthIn + ''', ''' + @weekIn + ''', ''' + @dayInWweek + ''', ''' + @activeDate + ''', ''0'', ''0'', ' + CAST(@activeHours AS NVARCHAR(10)) + ')' exec(@insertSql) END ELSE BEGIN DECLARE @updateSql NVARCHAR(500) SET @updateSql = 'update gl_activity_time_statistics set ' + @secondRankType + ' = ISNULL(' + @secondRankType + ',0) + ' + CAST(@activeHours AS NVARCHAR(10)) + ' where agent_number = ''' + @assignId + ''' and date_now = ''' + @activeDate + ''' and is_edit_byhand = ''0''' exec(@updateSql) END END --更新gl_activity_sale_statistics IF((@firstRankType = 'AGY_STD__10' AND (@secondRankType = 'AGY_STD__1001' OR @secondRankType = 'AGY_STD__1002') AND @thirdRankType <> 'AGY_STD__100201') OR (@firstRankType like '%BR%' OR @firstRankType like '%BD%')) BEGIN DECLARE @var_count2 INT SELECT @var_count2 = COUNT(*) FROM gl_activity_sale_statistics WITH(TABLOCKX) WHERE date_now = @activeDate AND agent_number = @assignId IF(@var_count2 = 0) BEGIN DECLARE @insertSql2 NVARCHAR(500) DECLARE @insertNewId2 NVARCHAR(32) SET @insertNewId2 = replace(newid(),'-','') SET @insertSql2 = '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, ' + @thirdRankType +' ) values(''' + @insertNewId + ''', ''' + @assignId + ''', ''' + @yearIn + ''', ''' + @quarterIn + ''', ''' + @monthIn + ''', ''' + @weekIn + ''', ''' + @dayInWweek + ''', ''' + @activeDate + ''', ''0'', ''0'', ' + CAST(1 AS NVARCHAR(10)) + ')' exec(@insertSql2) END ELSE BEGIN DECLARE @updateSql2 NVARCHAR(500) SET @updateSql2 = 'update gl_activity_sale_statistics set ' + @thirdRankType + ' = ISNULL(' + @thirdRankType + ',0) + ' + CAST(1 AS NVARCHAR(10)) + ' where agent_number = ''' + @assignId + ''' and date_now = ''' + @activeDate + ''' and is_edit_byhand = ''0''' exec(@updateSql2) END END --更新更新gl_activity_emp_statistics IF(@firstRankType = 'AGY_STD__11' AND @secondRankType = 'AGY_STD__1101' AND @thirdRankType <> 'AGY_STD__110110') BEGIN DECLARE @var_count3 INT SELECT @var_count3 = COUNT(*) FROM gl_activity_emp_statistics WITH(TABLOCKX) WHERE date_now = @activeDate AND agent_number = @assignId IF(@var_count3 = 0) BEGIN DECLARE @insertSql3 NVARCHAR(500) DECLARE @insertNewId3 NVARCHAR(32) SET @insertNewId3 = replace(newid(),'-','') SET @insertSql3 = '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, ' + @thirdRankType +' ) values(''' + @insertNewId + ''', ''' + @assignId + ''', ''' + @yearIn + ''', ''' + @quarterIn + ''', ''' + @monthIn + ''', ''' + @weekIn + ''', ''' + @dayInWweek + ''', ''' + @activeDate + ''', ''0'', ''0'', ' + CAST(1 AS NVARCHAR(10)) + ')' exec(@insertSql3) END ELSE BEGIN DECLARE @updateSql3 NVARCHAR(500) SET @updateSql3 = 'update gl_activity_emp_statistics set ' + @thirdRankType + ' = ISNULL(' + @thirdRankType + ',0) + ' + CAST(1 AS NVARCHAR(10)) + ' where agent_number = ''' + @assignId + ''' and date_now = ''' + @activeDate + ''' and is_edit_byhand = ''0''' exec(@updateSql3) END ENDENDSET @counntOfInsert = @counntOfInsert - 1ENDGO
详细解决方案
sqlserver中编撰的after insert触发器
热度:129 发布时间:2016-05-05 09:47:19.0
相关解决方案
- ssh ,insert 有关问题
- [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.多谢
- com.microsoft.sqlserver.jdbc.SQLServerException: 列名 n_id 无效。解决方案
- com.microsoft.sqlserver.jdbc.SQLServerException: 该联接已关闭
- Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'解决方法
- Syntax error, insert "}" to complete Block,该如何处理
- com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。该怎么解决
- MyBatis3.1.1 Insert 回到主键 long类型 MYSQL 数据库
- com.microsoft.sqlserver.jdbc.SQLServerException: 没为参数号 2 设置值
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可托 SQL Server
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.解决思路
- 初学者问个SQL语句 insert 有关问题
- java sqlserver jdbc有关问题
- asp.net mvc3.0+sqlserver 高并发日记系统解决方案,求思路
- 可以生成 sql server 2000 用户数据库表的 新增 修改 删除 查找的存储过程和访问表的类。类名就是表名 类属性就是表字段 类中有 insert u,该如何处理
- 可以生成 sql server 2000 用户数据库表的 新增 修改 删除 查找的存储过程和访问表的类。类名就是表名 类属性就是表字段 类中有 insert u解决思路
- asp.net +sqlserver 能不能 读取一次数据库,然后按条件输出,该如何解决
- sqlserver bulk insert 远道导入数据!
- 关于网页数据缓存运用机制(cache.insert,cache.update)
- sqlserver 2005 的問題,该如何处理
- sqlserver 数据库备份,该怎么处理
- 未能加载资料或程序集“Microsoft.SqlServer.Replication”或它的某一个依赖项。试图加载格式不正确的程序
- MS sqlserver 查询有关问题,
- 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。解决思路
- Microsoft.SqlServer.Replication.dll 引发的IIS异常
- INSERT 语句与 COLUMN FOREIGN KEY 约束 冲突,该怎么处理
- 要取TextBox里的值插入表, insert into table value(); 括号里应该如何写
- C# SQLServer 企业应用解决思路
- sqlserver like '%,3,%' 有关问题。