我有大桌子,需要定期周末移动数据。
我需要批量插入,我该怎么办..我尝试下面的代码,它继续循环。更快捷的方式使用。
-- 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 :(得分:0)
您可以尝试SELECT INTO
http://www.w3schools.com/sql/sql_select_into.asp
如果您使用的是MS SQL Server,则对非常大的表进行分区切换:
http://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx
答案 1 :(得分: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 @skip=@skip+1000
END