复制-复制存储过程

执行原因:
涉及2张表,其中一张表是excel ,被更新的表在数据库中,要更新的数据有80万,被更新的数据是近2千万的表,涉及同步到6个地方。
按理来说批量更新也是可行的,但是由于时间限制,加上功能上的限制还是决定用别的方法(即复制存储过程)。
 
之前的方法是:把excel的数据解析出来,然后每5000更新一次,间隔10s ,每个sheet为5万。中间会有阻塞的情况可以随时停掉重新执行。
        麻烦的地方在于执行的时候需要监控分发数据库,避免堆积太多命令导致阻塞
 
现在的方法是:把语句拆为分批的执行的,把excel的数据导入到一张表中,并将此表进行同步,然后把存储过程也进行同步,在 发布属性 中 选择 项目属性--> 存储过程的执行 即可。
如下图:
 
这个在测试环境中更新没有问题,在生产环境更新的时候很慢,发现有的订阅端没有索引。
参考一个脚本:
use DBA
go

CREATE PROCEDURE [dbo]. [UP_PromotionsCode20131218_single]  
  @id int , 
  @batch int = 2000 
AS  
SET NOCOUNT ON;  
UPDATE   b  
SET CId = a. CId  
    , GetCodeDate= GETDATE () 
    , Status = 1 
FROM _dba . dbo. Code20131218 a WITH( NOLOCK ) 
INNER join _dba. dbo .Code20131218_test b with (nolock )  
    on a . Code = b . Code 
WHERE   A . ID between @id and @id + @batch - 1 

调用脚本如下:

--- 使用以下脚本调用
declare @id int = 1, @batch int = 100 ;
select @id = min( a .id )
FROM dbo . PromotionsCode20131218 a WITH ( NOLOCK)
INNER join dbo. PromotionsCode b with( nolock )
on a . PrmotionCode = b . PrmotionCode
WHERE B . Status = 0;
while @id < 800000
begin ;
EXEC [UP_PromotionsCode20131218_single] @id, @batch
set @id = @id + @batch
raiserror ('...%d' , 10, 1 , @id ) with nowait ;
end ;

 

转载于:https://www.cnblogs.com/zerocc/p/3484335.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值