1

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

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

我还想知道,是否可以在SELECT不使用任何现有表的情况下使用子句和 CTE(公用表表达式)显示 1 百万行(编号从 1 到 1000000)。

我将不胜感激。

4

2 回答 2

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)
;

请参阅SQL Fiddle with Demo of 100 numbers being created。

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

于 2013-03-24T17:37:01.633 回答
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

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

于 2013-03-24T17:34:59.313 回答