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 mil行(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)
;

作成されている100個の数値のデモを含むSQLフィドルを参照してください。

このコードは、@ Aaron Bertrandの記事「ループなしでセットまたはシーケンスを生成する–パート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 に答える