SQLSERVER 数据调度示例,调度数据到中间表或者历史表
2017-10-19 10:39 newbirth 阅读(905) 评论(0) 编辑 收藏 举报1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步