sqlserver 循环插入统一提交

遇到一道面试题,要把1-1万个数分批10次提交全部插入表里面,当时都不理解什么是分批的要求。

先建个表

CREATE TABLE Customers3
(
   CustomerID INT NOT NULL,
   CustomerName CHAR(10) NOT NULL,
   CustomerAddress CHAR(10) NOT NULL,
   Comments CHAR(5) NOT NULL,
   Value INT NOT NULL
)
GO

传统的插入数据,一般这样就可以了,不过要18秒

declare @begintime datetime
declare @endtime datetime
set @begintime=getdate()
DECLARE @i INT = 1
WHILE (@i <= 100000)
BEGIN
INSERT INTO Customers3 VALUES
(
   @i,
   'C1',
   'C2',    
   'C3',
   @i
)

SET @i += 1
END
set @endtime=getdate()
select @endtime,@begintime,@endtime-@begintime

GO

先插入在提交,

DECLARE @i INT = 1
declare @bian int =1000
declare @begintime datetime
declare @endtime datetime
set @begintime=getdate()
WHILE (@i <= 100000)
BEGIN
if(@i%@bian=0)
   begin
      if(@@trancount>0)
       begin
         commit tran
       end
      else
       begin
         begin tran
       end
    end


INSERT INTO Customers3 VALUES
(
   @i,
   'C1',
   'C2',    
   'C3',
   @i
)

SET @i += 1
END

if(@@trancount>0) 
commit tran

set @endtime=getdate()
select @endtime,@begintime,@endtime-@begintime
GO

这样能够在10秒内插入,其实就是在原来的基础上加一个分组的值,先把组的语句统一再执行,就好比

第一种是循环的

begin tran 

insert ***

commit tran

***

begin tran 

insert ***

commit tran

第二种是嵌套再循环的

begin tran

insert *** 

***

begin tran

insert***

commit tran*** commit tran

所以逻辑上就可以加快速度了

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值