今天看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},....
与其它的解决方案比,这种插入最小化了对事务日志的写操作。所以速度快。