快速创建数字填充表

今天看InsideSQLSERVER2008,看到书上有一种非常好的方法来创建数字辅助表。这种方法效率非常高,创建填充100万条数据的数字表,在我的电脑上只用了5秒。

代码如下:

 

GO
IF OBJECT_ID('dbo.Nums') IS NOT NULL DROP TABLE dbo.Nums;

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
  INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
  SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums 
  SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
GO


 

这段代码在变量@rc中保存已插入到数字辅助表的行数。它先把n=1的行插入,然后插入 @rc *2 < @max

这时插入的序列就是这样,{1}, {2}, {3,4}, {5,6,7,8}, {9,10,11,12,13,14,15,16},....


与其它的解决方案比,这种插入最小化了对事务日志的写操作。所以速度快。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值