复制,将大量行插入表中

时间:2013-04-26 01:36:38

标签: sql sql-server tsql

我必须从一张桌子到另一张桌子上复制超过一百万行。因为我们有50多个数据库需要更新,所以我使用一个小的php程序来启动每个数据库的事务。但是,虽然我只是在一个数据库上进行测试,但我注意到如果我使用“插入选择”语句,服务器只能复制10000行然后突然停止?

我们正在对数据库进行大修,我们创建了一个具有多个更新和插入查询的事务来完成工作,事务中的所有其他查询都已完成。但批量插入不是???即使那批量插入后还有其他一些tsql动作??

我使用以下tsql脚本作为事务的一部分:

INSERT INTO [dbo].[tbl_SystemStatistics] ( 40 column)  
SELECT 40 column 
FROM [dbo].[tbl_SystemStatisticsOverhaul]

2 个答案:

答案 0 :(得分:1)

你的php中的max_execution_time是否达到?我认为默认是30秒。 http://php.net/manual/en/function.set-time-limit.php

答案 1 :(得分:1)

尝试这样的事情 -

SET NOCOUNT ON;

DECLARE 
      @x INT
    , @count INT

SELECT 
      @count = COUNT(1)
    , @x = 1 
FROM dbo.tbl_SystemStatisticsOverhaul

IF EXISTS(
    SELECT 1
    FROM tempdb.dbo.sysobjects
    WHERE ID = OBJECT_ID('tempdb..#import')
) DROP TABLE #import;

SELECT [column], RowNumber = ROW_NUMBER() OVER (ORDER BY id)
INTO #import
FROM dbo.tbl_SystemStatisticsOverhaul

WHILE @x < @count BEGIN

    INSERT INTO dbo.tbl_SystemStatistics ([column])  
    SELECT [column]
    FROM #import 
    WHERE RowNumber BETWEEN @x AND @x + 9

    SELECT @x = @x + 10

END