質問: true; foreach (var col in table.Columns.Cast().Where(c => !c.Computed)) { bcp.ColumnMappings.Add(col.Name, col.Name); } bcp.WriteToServer(reader); } } } ```
回答: 簡単なアプローチは次のとおりです。 1. 自分でバッチを実装します。これは、 `SqlBulkCopy`が各`WriteToServer`呼び出しのメタデータを照会する必要があるため、わずかな非効率性を`SqlBulkCopy`ます。したがって、バッチを小さすぎないようにしてください。実験。 2. テンポラリテーブル( `#temp`テーブルではなく、永続的なテーブル)に挿入すると、接続が失われて続行することができます。 3. 次に、行を一時表から実表に移動する最後のステップとして`insert...select`を実行します。 このダンスは、作業を再試行可能なバッチに分割しますが、1つのトランザクションと同じように動作します。 アトミック性が必要ない場合は、ステップ(1)でそれを残すことができます。