• 使用sql脚本,每隔一分钟,向数据库中插入一条记录


    以前从来没有写个sql脚本,由于项目需要,我必须往数据库中插入自上周以来,到现在的每一分钟的数据,刚开始的时候,以为用C++连接上数据库,然后每隔一分钟往表中插入数据,但是觉得好像也不是很方便,所以就选择使用SQL语言来实现了,事实证明SQL脚本是非常强大的,对于日期的各种操作、对于随机数的支持,直接贴代码,备忘:

    /*先清空carflow中的数据,用delete from table删除几十万条数据会非常的慢,因为要写日志文件*/
    truncate table [saveenergy].[dbo].[carflow]

    declare @collectorid1 int
    select @collectorid1=collectorid from [saveenergy].[dbo].[collector] where position='1.成双大道商都路交叉口'

    declare @collectorid2 int
    select @collectorid2=collectorid from [saveenergy].[dbo].[collector] where position='2.成双大道商都路交叉口'

    declare @collectorid3 int
    select @collectorid3=collectorid from [saveenergy].[dbo].[collector] where position='藏卫路北三段五岔路口'


    /*设置数据库各列变量*/
    declare @time datetime
    set @time='2011-07-11 00:00:00'

    declare @i int
    set @i=1
    declare @now datetime
    set @now=(select GETDATE())

    declare @maxi int
    set @maxi=(select datediff(MINUTE,'2011-07-11 00:00:00',@now))

    declare @densityleft float
    declare @densityright float

    declare @leftflow int
    declare @rightflow int

    declare @tmpdens float
    declare @tmpflow int


    while @i<@maxi
    begin
    set @leftflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )
    set @rightflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )
    set @time=(select dateadd(MINUTE,1,@time))
    set @densityleft=(select ROUND(rand(),3))
    set @densityright=(select ROUND(rand(),3))



    if @leftflow<@rightflow
    begin
    if @densityleft>@densityright
    begin

    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    if @leftflow>@rightflow
    begin
    if @densityleft<@densityright
    begin
    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    INSERT INTO [saveenergy].[dbo].[carflow]
    (
    [collectorid]
    ,
    [leftflow]
    ,
    [rightflow]
    ,
    [flowtime]
    ,
    [trafficdensityleft]
    ,
    [trafficdensityright])
    VALUES
    (
    @collectorid1
    ,
    @leftflow
    ,
    @rightflow
    ,
    @time
    ,
    @densityleft
    ,
    @densityright)





    /*22222222222222222*/


    set @leftflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )
    set @rightflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )

    set @densityleft=(select ROUND(rand(),3))
    set @densityright=(select ROUND(rand(),3))

    if @leftflow<@rightflow
    begin
    if @densityleft>@densityright
    begin

    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    if @leftflow>@rightflow
    begin
    if @densityleft<@densityright
    begin
    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    INSERT INTO [saveenergy].[dbo].[carflow]
    (
    [collectorid]
    ,
    [leftflow]
    ,
    [rightflow]
    ,
    [flowtime]
    ,
    [trafficdensityleft]
    ,
    [trafficdensityright])
    VALUES
    (
    @collectorid2
    ,
    @leftflow
    ,
    @rightflow
    ,
    @time
    ,
    @densityleft
    ,
    @densityright)


    /**3333333333333333333*/

    set @leftflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )
    set @rightflow=(SELECT CAST( FLOOR(RAND()*50) AS INT) )

    set @densityleft=(select ROUND(rand(),3))
    set @densityright=(select ROUND(rand(),3))

    if @leftflow<@rightflow
    begin
    if @densityleft>@densityright
    begin

    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    if @leftflow>@rightflow
    begin
    if @densityleft<@densityright
    begin
    set @tmpdens=@densityleft
    set @densityleft=@densityright
    set @densityright=@tmpdens
    end
    end

    INSERT INTO [saveenergy].[dbo].[carflow]
    (
    [collectorid]
    ,
    [leftflow]
    ,
    [rightflow]
    ,
    [flowtime]
    ,
    [trafficdensityleft]
    ,
    [trafficdensityright])
    VALUES
    (
    @collectorid3
    ,
    @leftflow
    ,
    @rightflow
    ,
    @time
    ,
    @densityleft
    ,
    @densityright)
    set @i=@i+1
    end

    GO

      

  • 相关阅读:
    2020年面向对象程序设计寒假作业1_实践题
    2020年面向对象程序设计寒假作业1_问答题
    实验5:开源控制器实践——POX
    实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践
    实验2:Open vSwitch虚拟交换机实践
    第一次个人编程作业
    实验1:SDN拓扑实践
    第一次博客作业
    面向对象程序设计寒假作业3
  • 原文地址:https://www.cnblogs.com/justinzhang/p/2116697.html
Copyright © 2020-2023  润新知