用百万空行填充表的有效方法

时间:2013-03-24 17:32:22

标签: sql-server-2008 tsql insert common-table-expression

你知道用大量空行填充表格的任何有效方法吗?使用WHILE子句插入它们并不是很有效。绝对有更好的方法用空行填充表格:

DECLARE @CNT int
SET @CNT = 1
WHILE @CNT < 3
BEGIN
INSERT INTO TAB VALUES( '1' )
SET @CNT = @CNT + 1
END

我还想知道,如果可以使用SELECT子句和CTE(公用表表达式)显示1 mil行(编号从1到1000000)而不使用任何现有表。

我将不胜感激。

2 个答案:

答案 0 :(得分:8)

这是一种生成数字序列的方法:

SELECT TOP (1000000) n = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id]))
INTO yourtable
FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2
OPTION (MAXDOP 1);

CREATE UNIQUE CLUSTERED INDEX n ON yourtable(n)
-- WITH (DATA_COMPRESSION = PAGE)
;

查看正在创建的100个号码的SQL Fiddle with Demo

此代码来自@Aaron Bertrand's文章Generate a set or sequence without loops – part 1。本文还包括生成数字序列的其他方法。

答案 1 :(得分:1)

CREATE PROCEDURE dorepeat()
BEGIN
    SET @x = 0;
    REPEAT 
        INSERT INTO your_table (value) VALUES ("");
        SET @x = @x + 1; 
    UNTIL @x > 999999 END REPEAT;
END

我认为这样的事情非常快。