質問: "dbo.Orders"; conn.Open(); bulkInsert.WriteToServer(rows.ToArray()); ``` rowsはDataRow型のリストです。 私が使用しているデータはオーダーなので、大量のデータはordersテーブルに挿入されていますが、他のテーブルも挿入する必要がありますが、これらの挿入にはordersテーブルに挿入された行への参照が必要です。 これはSQLBulkCopyで可能ですか、手動で各行を挿入し、挿入された行のデータベースを照会して参照フィールドを取得し、その値を将来の挿入に使用する必要がありますか?
回答: SqlBulkCopyは、挿入されたID値を返すことはできません。 したがって、SqlBulkCopyだけを使用することは不可能ですが、一時テーブルでいくつかのトリックを使用することで実現できます。 要するに: * 一時テーブルに一括して挿入する * OUTPUT句を使用して一時表から挿入先に(ID値を取得するために) * OUTPUT句から返されたID値をすべての行に設定します。 **免責事項** :私はプロジェクトバルクオペレーションのオーナーです このプロジェクトは以下のような機能を追加することでSqlBulkCopyの制限を克服しています: * アイデンティティ値の出力 * BulkInsert * 一括更新 * BulkDelete * バルクマージ 例: ``` var bulk = new BulkOperation(connection) bulk.DestinationTableName = "dbo.Orders"; bulk.ColumnMappings.Add("OrderId", ColumnMappingDirectionType.Output); bulk.ColumnMappings.Add("Price"); bulk.ColumnMappings.Add("Quantity"); bulk.BulkInsert(rows); ```