SQL Server 存储过程与触发器

本文深入探讨了 SQL Server 中触发器和存储过程的使用,通过实例展示了如何利用触发器自动计算速度,并介绍了存储过程 `AverateSpeedProc` 的实现方式,以实现实时数据聚合。

一、触发器

USE [index]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE trigger [dbo].[trigger_compute_speed] on [dbo].[index_new]
  After  insert
as
  DECLARE @linkid int
  DECLARE @speed float
  DECLARE @dt datetime
  select @linkid= inserted.linkid,@dt = inserted.dtime from inserted
  insert into dbo.averspeed(linkid,dtime,avespeed)   select inserted.linkid,Dateadd(mi,5,inserted.dtime), (select 1.0*sum(carnum*rlength)/sum(carnum*rlength/speed) from dbo.index_new where linkid = @linkid and dtime > @dt-1.0*15.1/(24*60)) from inserted

 

主要刚刚插入的值用inserted

 

二、存储过程

create proc AverateSpeedProc
@dt datetime

as
begin
 DECLARE @dtime datetime
 DECLARE @speed float
 DECLARE @length float
 DECLARE @linkid int
 DECLARE @len float
 DECLARE @classid int
 DECLARE cursor_links CURSOR FOR select speed,length,dtime,linkid,len from dbo.AM_20100906 where dtime = @dt
 OPEN cursor_links
 WHILE @@fetch_status = 0
 BEGIN
  FETCH NEXT FROM cursor_links INTO @speed,@linkid,@dtime,@classid,@length,@len   insert into dbo.index_new (speed,linkid,dtime,classid,rlength,carnum) values (@speed,@linkid,@dtime,@classid,@length,@len)
 END
 close cursor_links
 deallocate cursor_links
end

exec AverateSpeedProc '2011-09-06 07:30:00'

 

注意 SqlServer 与 Oracle 的区别,SqlServer 没有记录集的概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值