当前位置: 代码迷 >> Sql Server >> 表中产生新数据后,触发执行一段SQL语句
  详细解决方案

表中产生新数据后,触发执行一段SQL语句

热度:107   发布时间:2016-04-24 08:57:37.0
求助:表中产生新数据后,触发执行一段SQL语句

Create table User01
(
uid varchar(5),
dt date,
p1 float,
p2 float
)


Create table User02
(
uid varchar(5),
weight float
)


Create table Result
(
dt date,
CV float
)


我有上面这三张表。User01是张动态的表,间隔固定时间,表中的数据会被清空,然后插入新数据。我想要实现的业务逻辑是:当User01表插入新数据后,它要和User02表进行关联,一起运算一个公式。最后把结果值插入到Result表中。

单次执行的语句是这样的:

;with cte as(
select U1.uid, U1.dt, (U1.p1-U1.p2)*U2.weight as New_p from User01 as U1
inner join User02 as U2
on U1.uid=U2.uid
)

insert into Result
select dt, STDEV(New_p)/AVG(New_p) as CV  from cte
group by dt


如果是实时的自动运行是不是要使用触发器来做?我没用过涉及三张表的触发器,请各位帮帮忙。
------解决思路----------------------
既然有批量清空、插入的操作,你把这句语句加在这个操作的最后不就行了。
------解决思路----------------------
if (object_id('TR_U1', 'tr') is not null)
    drop trigger TR_U1
go

create trigger TR_U1
on  User01  --插入表中的数据
for insert
as
--定义变量
--给变量赋值
;with cte as(
select 
U1.uid, 
U1.dt, 
(U1.p1-U1.p2)*U2.weight as New_p 
from User01 as U1
inner join User02 as U2
on U1.uid=U2.uid
)
insert into Result
select dt,STDEV(New_p)/AVG(New_p) as CV  from cte
group by dt
------解决思路----------------------
楼上的方法应该可以了
  相关解决方案