2014-03-12 184 views
0

我有大桌子,需要週末定期移動數據。批量插入表

我需要批量插入,我該怎麼辦..我嘗試了下面的代碼,它不斷循環。 PlEASE SUGGEST更快的方式。

-- CREATE TABLE tmptbl1 (ids int) 
-------------------------------------- 
;WITH q (n) AS (
    SELECT 1 
    UNION ALL 
    SELECT n + 1 
    FROM q 
    WHERE n < 10000 
) 
INSERT INTO tmptbl1 
SELECT * FROM q 
OPTION (MAXRECURSION 0) 
-------------------------------------- 
-- CREATE TABLE tmptbl2 (ids int) 

WHILE(1 = 1) 
BEGIN 
    INSERT INTO tmptbl2 (ids) 
    SELECT TOP 1000 ids FROM tmptbl1 
    IF (@@ROWCOUNT = 0) 
     BREAK; 
END 

回答

0

試試這個:

declare @skip int = 0 
WHILE(1 = 1) 
BEGIN 

    INSERT INTO tmptbl2 (ids) 
    select top 1000 ids from tmptbl1 where ids not in(select top (@skip) ids from tmptbl1) 
    IF (@@ROWCOUNT = 0) 
     BREAK; 
    select @[email protected]+1000 
END 
+0

謝謝,但因爲我發佈此問題時指定了sql 2008標記。 –

+0

修改爲sql2008,現在試試 – Jayvee

+0

此解決方案是否適合您? – Jayvee

0

您可以嘗試SELECT INTO

http://www.w3schools.com/sql/sql_select_into.asp

或非常大的表分區切換,如果你使用的是MS SQL服務器:

http://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx

+0

我只是想批量插入記錄..可以說我有10000條記錄,並希望在每批中插入1000行。 –

+0

你可以嘗試分頁http://www.codeproject.com/Articles/671902/Paging-in-MS-SQL-Server-using-ROW-NUMBER。 SQL Server 2012 FETCH-OFSET中也有新功能。但爲什麼你要實現批處理? – RoyalBandit

+0

我有SQL 2008 –