SqlServer 触发器 A表中插入一行数据后动态在B表中插入A表中计算
表t_mydata 的列定义如下: int?? id?,int?? station_id,datetime data_time,float LJLL 示例数据: 13911834?? 1? 2012-08-19 8:00:00? 2039886 13944831?? 1? 2012-08-20 8:00:00? 2043351 表t_station 的列定义如下 Int?? station_id,varchar station_name ,varchar ?station_detail 示例数据: 1???? MD1???? 铭德二期 2???? MD2???? 铭德一期 表t_point 的列定义如下: Int point_id,varchar point_name,varchar point_desc,int point_station_id 示例数据: 1? MD1_LJLL ?累计流量?? 1 ? 2? MD2_LJLL? 累计流量?? 2 表t_DTLJ? 的定义如下: Datetime data_time,float MD1_DTLJLL,flaot MD2_DTLJLL 这三个表的关系是: t_point的列point_name的内容是t_station表中station_name列内容加“_”加t_mydata表中数据列的列名。 t_mydata的station_id列 和 t_station表的 station_id列相连接。 t_DTLJ表的数据列的名称是t_station表的station_name列的内容加“_DT”加t_mydata表的LJLL名。 t_mydata表中列LJLL中的值是个累计增大的值。 我现在要求得是,向t_mydata表中插入一条数据后,计算出插入时间的数据和当天8点时的数据的差,将这差值插入到表t_DTLJ表中的对应的列中。 ? CREATE TRIGGER [CaculateDTLJ] ON [dbo].[t_mydata] --将插入的数据的站点ID和插入时间赋值给变量。 --声明游标 从t_point表中查询出所有累计量的点,累计量以LJ为关键字标志 并将累计量的名称,拆分为站名称和点名称 --打开游标 --读取游标数据 --循环判断游标中是否有数据未读取 --时间段内最小值 --时间段内最大值 --时间段内差值 --判断t_DTLJ表中是否含有列@str --查询当天8点时的时间,如果当前时间大于8点,则当天8点时间为当天8点时间。如果当前时间小于8点,则当天8点时间为前一天8点时间。 select @minTime=min(data_time)? from t_mydata where station_id=@stationid and data_time between (CASE when datepart([hour],@time)=8 and datepart([mi],@time)=0 and? datepart([ss],@time)=0? then DATEADD([hour],-16,convert(varchar(10),@time,120))? when datepart([hour],@time)>=8 THEN DATEADD([hour],8,120)) else DATEADD([hour],120))end) and @time --查询当天8点和当前时间的记录的差值 --执行sql语句 --滤掉空值 --如果存在已有记录则更新记录,否则插入新纪录 --关闭游标 --删除游标 DEALLOCATE name_cursor (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |