0

一括挿入と一括コピーを同時に行うにはどうすればよいですか? 2 つのテーブルが相互に依存しているため、一括コピーの影響を受ける必要があります。

したがって、テーブル 1 の挿入中にレコードが停止した場合、ロールバックされ、テーブル 2 が更新されないようにしたいと考えています。また、テーブル 1 が正常に挿入され、テーブル 2 の更新が失敗した場合、テーブル 1 はロールバックされます。

これは一括コピーで実行できますか?

編集

C# を使用して一括挿入を行っていることを言及する必要がありました。

このように見えますが、これは私が取り組んできた例です。そのため、ストアド プロシージャに変更する必要があるかどうかはわかりません (どのように表示されるか、C# コードがどのように表示されるかはわかりません)。

private static void BatchBulkCopy()
{
    // Get the DataTable 
    DataTable dtInsertRows = GetDataTable();

    using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
    {
        sbc.DestinationTableName = "TBL_TEST_TEST";

        // Number of records to be processed in one go
        sbc.BatchSize = 500000;

        // Map the Source Column from DataTabel to the Destination Columns in SQL Server 2005 Person Table
        // sbc.ColumnMappings.Add("ID", "ID");
        sbc.ColumnMappings.Add("NAME", "NAME");

        // Number of records after which client has to be notified about its status
        sbc.NotifyAfter = dtInsertRows.Rows.Count;

        // Event that gets fired when NotifyAfter number of records are processed.
        sbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(sbc_SqlRowsCopied);

        // Finally write to server
        sbc.WriteToServer(dtInsertRows);
        sbc.Close();
    }

}
4

2 に答える 2

0

一括挿入と一括コピーを同時に行うにはどうすればよいですか? 2 つのテーブルが相互に依存しているため、一括コピーの影響を受ける必要があります。したがって、テーブル 1 の挿入中にレコードが停止した場合、ロールバックされ、テーブル 2 が更新されないようにしたいと考えています。また、テーブル 1 が正常に挿入され、テーブル 2 の更新が失敗した場合、テーブル 1 はロールバックされます。これは一括コピーで実行できますか?

いいえ - SqlBulkCopy の要点は、できるだけ早くデータベースにデータを取得することです。データを単一のテーブルにダンプするだけです。

通常の使用例は、インポートされたテーブルを検査し、そのデータを「分割」して、必要な場所に格納することです。通常は、ストアド プロシージャを使用します (データは既にサーバー上にあるため、そしてそれを他のテーブルに配布したい - そのすべてのデータをクライアントに戻して検査し、もう一度サーバーに送り返したくない)。

SqlBulkCopy は、大量のデータを取得してテーブルにドロップするだけです。基準または条件に基づいてデータを複数のテーブルに分割することはできません。

于 2010-05-21T04:59:15.327 に答える
0

ユーザー定義のトランザクション内で一括挿入を実行できるため、次のようにします。

BEGIN TRANSACTION MyDataLoad
BEGIN TRY

BULK INSERT ...

BULK INSERT ...

COMMIT TRANSACTJION MyDataLoad
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

ただし、目的を達成するための他の方法がある場合もあります。テーブルに一括挿入する前にテーブルは空ですか? テーブルが相互に依存しているというのは、強制したい外部キー制約があるということですか?

于 2010-05-20T23:32:28.353 に答える