2013-04-26 66 views
2

我必須複製超過1百萬行從一個表到另一個。因爲我們有超過50個數據庫來更新我使用一個小型的php程序來啓動每個數據庫的事務。但是,雖然我只是在一個數據庫上測試,但我注意到如果我使用「Insert into Select from」語句,服務器只複製約10000行,然後突然停止?複製,插入大量的行到表

我們正在對數據庫進行大檢修,並且我們創建了一個事務並添加了多個更新並插入查詢來完成這項工作,事務中的所有其他查詢都完成了。但批量插入不?即使在批量插入後仍然有一些其他的tsql動作?

我用下面的TSQL腳本作爲交易的一部分:

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

你怎麼知道它停在10000? – Paparazzi 2013-04-26 02:14:23

+0

聽起來像你需要打破你的查詢。 – Kermit 2013-04-26 02:55:57

+0

我知道它有大約10000條記錄,因爲我可以在移動到的表格中看到它。 – 2013-04-26 04:16:14

回答

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 
1

是您的在php的max_execution_time達到?我認爲默認值是30秒。 http://php.net/manual/en/function.set-time-limit.php

+0

我已經將執行時間延長到500。我認爲SQL中必須有一些限制!我的意思是執行完整的轉換。我們在這裏有大約20個不同的陳述。只有來自該表的插入未完成:s – 2013-04-26 02:07:59