2014-03-12 234 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 –