2

我必须将超过 100 万行从一个表复制到另一个表。因为我们有超过 50 个数据库要更新,所以我使用一个小型 php 程序来启动每个数据库的事务。但是,当我只是在一个数据库上进行测试时,我注意到如果我使用“插入到选择自”语句,服务器只会复制大约 10000 行然后突然停止?

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

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

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

2 回答 2

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
于 2013-04-26T05:49:28.057 回答
1

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

于 2013-04-26T01:43:38.130 回答