您的位置:首页 > 数据库

sqlserver2000重复作业调度

2006-12-15 15:29 239 查看
在跟发电厂做辅助决策系统时,涉及到电量结算问题。电厂方只提供实时的每分钟的电力数据,我方要根据电力
来算出每一时段的电量(以一刻钟为一时段,一天96时段)。

涉及到两个问题:
1.从电厂端Oracle数据库中把yxrtdata实时表的数据采集到本地Sqlserver,并作为历史表存储
2.在本地处理里yxrtdata表把在一刻钟内的电力积分成电量,然后分解时间字段,对应到竞价辅助决策系统
数据库check_machine_quantity表的主键,最后插入记录。
电厂端Oracle数据库,所要采集的表结构:
CREATE TABLE [dbo].[yxrtdata] (
[ID] [decimal](10, 0) NOT NULL ,
[GCWZDM] [char] (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SZ] [decimal](1, 0) NULL ,
[SJ] [datetime] NULL
)

竞价辅助决策系统数据库(SQLserver2000)
被插入的表结构
CREATE TABLE [dbo].[CHECK_MACHINE_QUANTITY] (
[YEAR] [char] (4) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[MONTH] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[DAY] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[PERIOD_ID] [numeric](10, 0) NOT NULL ,
[POWER_PLANT_ID] [numeric](10, 0) NOT NULL ,
[MACHINE_NO] [numeric](10, 0) NOT NULL , --以上是主键
[CHECK_MACHINE_QUANTITY_EXAM_QUANTITY] [numeric](15, 4) NULL ,--要插入的电量
……………………
)

第一个问题的解决思路:在Sqlserver2000建立作业,实现每分钟采集数据。
第二个问题的解决思路:对一刻钟内的sz列求和公式为:sum(sz)*60.0/3600.0/10.0,单位为(万千瓦时),sz的单位为(兆千瓦).取sj的时间部分(小时,分钟)求出所在的段(一天共96个时段).以防对方数据晚采,对历史表的处理时间段为取得最大时间的前30分钟.
一下是处理过程的部分代码。
declare @maxTime as datetime,
@powerPlantID as decimal,
@periodID as decimal,
@machineNo as decimal,
@startTime as datetime,
@endTime as datetime,
@quantity as decimal(15,6)

set @powerPlantID=32 --电厂ID,若其他电厂修改.
select @maxTime=max(sj) from ycrtdata

--取最近一刻时间
set @maxTime=dateadd(minute,-convert(decimal,datepart(minute,@maxTime)%15),@maxTime)
--设定起始时间
set @startTime=DateAdd(minute,-30,@maxTime)
set @endTime=DateAdd(minute,15,@startTime)
--转为第几时段
set @periodID=(convert(decimal,datepart(hour,@startTime))*60+convert(decimal,datepart
(minute,@startTime)))/15+1

--处理1#机对应ID=207
select @quantity=sum(sz)*60.0/3600.0/10.0 from ycrtdata where id=207 and sj>=@startTime and
sj<@endTime
insert into gboss..CHECK_MACHINE_QUANTITY
(year,month,day,period_id,power_plant_id,machine_no,check_machine_quantity_exam_quantity)
values(year(@startTime),month(@startTime),day
(@startTime),@periodID,@powerPlantID,1,@quantity)
--delete from ycrtdata where id=207 and sj>=@startTime and sj<@endTime

在Sqlserver中新建作业,每15分钟执行一次。 这样就可以实现电力积分,转为电量存到CHECK_MACHINE_QUANTITY的表中的重复作业调度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: