2012-02-28 52 views
3

我想在一個表中插入10000條記錄,我目前在上面的代碼中插入編寫這些代碼 在SQL Server 2005如何插入記錄的N個表在單個命令

declare @n decimal(10,0); 
set @n = 0; 
while (@n < 10000) 
begin 
    insert into table1 values (@n+1) 
    set @n = @n + 1 
end 

命令執行10000次,是否存在任何單個命令來執行此操作。

回答

5

您也可以使用SYS的對象,你的優勢:

INSERT INTO table1(n) 
SELECT TOP 10000 ROW_NUMBER() OVER(ORDER BY a.object_id) AS n FROM sys.objects a CROSS JOIN sys.objects b 
GO 
+0

+1正是我所要發佈:) – AdaTheDev 2012-02-28 11:05:19

+1

這顯然只有當sysobjects有足夠的行來笛卡爾 - 加入自己並提供足夠的行時纔有效。如果你想爲1000萬行使用這個,你可能需要多次交叉連接。 – cairnz 2012-02-28 12:56:20

4

您可以使用CTE創建一個10000條記錄的內存表,並使用它將其插入到您的實際表中。

;WITH q (n) AS (
    SELECT 1 
    UNION ALL 
    SELECT n + 1 
    FROM q 
    WHERE n < 10000 
) 
INSERT INTO table1 
SELECT * FROM q 
OPTION (MAXRECURSION 0) 
0

一個快速的方法(從HERE):

declare @t table (number int) 
insert into @t 
    select 0 
    union all 
    select 1 
    union all 
    select 2 
    union all 
    select 3 
    union all 
    select 4 
    union all 
    select 5 
    union all 
    select 6 
    union all 
    select 7 
    union all 
    select 8 
    union all 
    select 9 

insert into numbers 
    select 
     t1.number + t2.number*10 + t3.number*100 
    from 
     @t as t1, 
     @t as t2, 
     @t as t3