我必须从一张桌子到另一张桌子上复制超过一百万行。因为我们有50多个数据库需要更新,所以我使用一个小的php程序来启动每个数据库的事务。但是,虽然我只是在一个数据库上进行测试,但我注意到如果我使用“插入选择”语句,服务器只能复制10000行然后突然停止?
我们正在对数据库进行大修,我们创建了一个具有多个更新和插入查询的事务来完成工作,事务中的所有其他查询都已完成。但批量插入不是???即使那批量插入后还有其他一些tsql动作??
我使用以下tsql脚本作为事务的一部分:
INSERT INTO [dbo].[tbl_SystemStatistics] ( 40 column)
SELECT 40 column
FROM [dbo].[tbl_SystemStatisticsOverhaul]
答案 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