2

あるテーブルから別のテーブルに 100 万行以上をコピーする必要があります。更新するデータベースが 50 以上あるため、小さな php プログラムを使用して、データベースごとにトランザクションを開始します。しかし、1 つのデータベースでテストしているだけで、"Insert into Select from" ステートメントを使用すると、サーバーは約 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 に答える