1

C# の SqBulkCopy を介して SQL Server にインポートする一連のテキスト ファイルがあります。複数のレコードに表示されるレコードがいくつかあります。エラーをスローして停止するのではなく、それらをスキップしたいと思います。

明確な「uniqueID」/主キーがある場合は、すべて問題ありません。「WITH (IGNORE_DUP_KEY = ON)」を使用して効果を上げました。

ただし、この場合、すべてのフィールドを結合するか、すべてのフィールドを含む複合キーを作成しない限り、そのような uniqueID を決定することはできません。一意の transactionID または類似のものを取得しようとしましたが、利用できるものはありません。レコードは同じでも、フィールドの 1 桁が変更されている場合があります。この場合、テーブルに挿入します。

すべてのフィールドに対してキーを作成するよりも良いアプローチがあると思いますか? 私がそうすると、日付、文字列、値などをすべて混ぜてキーを形成する必要があることを意味します。

行をクエリし、入力行のハッシュと比較するために値をハッシュすることは別の考えでしたが、パフォーマンスはひどいものになると確信しています:)

これを行う最善の方法について誰か提案がありますか?

ありがとう

4

2 に答える 2

5

インポートする場合は、ターゲット テーブルと同じスキーマを持つ一時テーブルに挿入してデータの重複を排除するステージを作成し、SELECT DISTINCTそれに対してクエリを実行して、このクエリの結果を最終目的地テーブル。数千万行について話している場合を除き、これは一度実行するだけでよいため、問題なく動作するはずです。

于 2011-06-14T06:07:21.647 に答える
2

EXCEPTを使用できます:

insert into TargetTable
select fieldlist from SourceTable
except
select fieldlist from TargetTable;
于 2011-06-14T11:34:14.753 に答える