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