`
seawavenews
  • 浏览: 231500 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

sqlserver2000重复作业调度

阅读更多
 
在跟发电厂做辅助决策系统时,涉及到电量结算问题。电厂方只提供实时的每分钟的电力数据,我方要根据电力
来算出每一时段的电量(以一刻钟为一时段,一天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的表中的重复作业调度。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics