zoukankan      html  css  js  c++  java
  • SQLSERVER 数据调度示例,调度数据到中间表或者历史表

    USE [MeiDongPay_Test]
    GO
    /****** Object:  StoredProcedure [dbo].[Job_BatchTransferOrderToMidst]    Script Date: 2017/10/19 10:37:41 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER
    PROC [dbo].[Job_BatchTransferOrderToMidst]
    AS
        SET NOCOUNT OFF    
        BEGIN
            DECLARE @MinID INT ,--最小值
                @MaxID INT ,--最大值
                @GoalID INT ,--上限
                @Step INT ,--步长
                @StartTime DATETIME ,--约束时间
                @CurrHour INT--当前小时数
            SET @CurrHour = DATEPART(hh, GETDATE())
    		SELECT @CurrHour
    		--当前小时限定只在指定时间段内处理数据
            IF ( @CurrHour >= 0 AND @CurrHour < 23)
                BEGIN
    			--仅处理小于约束时间的数据
                    SET @StartTime = CONVERT(VARCHAR(10), GETDATE(), 23)
                    SELECT  @StartTime
    			--获取最小值 最大值 上限值
                    SELECT  @MinID = 0 ,
                            @MaxID = ( SELECT   MIN(ID)
                                       FROM     dbo.PayOrderInfo WITH ( NOLOCK )
                                       WHERE    SubmitTime < @StartTime
                                     ) ,
                            @GoalID = ( SELECT  MAX(ID)
                                        FROM    dbo.PayOrderInfo WITH ( NOLOCK )
                                        WHERE   SubmitTime < @StartTime
                                      ) ,
                            @Step = 3000
    			--数据处理
                    IF ( @MaxID <= @GoalID )
                        BEGIN
    					--边界值修正
                            SET @MinID = @MaxID
                            SET @MaxID = @MinID + @Step
                            IF ( @MaxID > @GoalID )
                                SET @MaxID = @GoalID
    					--启动事务
                            BEGIN TRAN
    					--创建临时表
                            SELECT  *
                            INTO    #tempOrder
                            FROM    dbo.PayOrderInfo
                            WHERE   Id BETWEEN @MinID AND @MaxID
    					--临时表数据插入历史表
                            INSERT  INTO PayOrderInfo_Midst
                                    SELECT  *
                                    FROM    #tempOrder
    					--休眠一秒 ,大数据量度执行时休眠1s可以让cpu有机会创建其他命令
                            WAITFOR DELAY '00:00:01' 
    					--源表删除已插入历史表的行
                            DELETE  FROM dbo.PayOrderInfo
                            WHERE   ID BETWEEN @MinID AND @MaxID
    					--删除临时表				
                            DROP TABLE #tempOrder
    					--事务提交
                            COMMIT TRAN
                        END
                END
        END
    

      

  • 相关阅读:
    Java之时间处理(当前年的上一年、上一季度、当月、当季)
    Nginx代理之大文件下载失败问题
    PageHelper之排序
    MySQL之集群配置
    Java之判断字符串是否为数字(包含浮点型数据)
    /bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file:
    Error Code: 1153
    413 Request Entity Too Large
    MyBatis分页插件失效问题之解决
    HikariConfig 连接池属性详解
  • 原文地址:https://www.cnblogs.com/password1/p/7691166.html
Copyright © 2011-2022 走看看