复制-复制存储过程

执行缘由:
涉及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 

调用脚本以下:web

--- 使用如下脚本调用
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 ;

 

相关文章
相关标签/搜索