データベース内の重複する行に一致するメモリ内のDataTableから行を削除する

.net datatable sqlbulkcopy sql-server vb.net

質問

私は宛先テーブルへのBulkCopyに使用するdataTableを持っています。私は主キー違反を解決しようとしています。そのため、一時テーブルを使用して本番とマージする代わりに、WriteToServerメソッドに渡す前に、メモリ内のDataTableから冗長な行を削除しようとしています。

私のコードでは、列とフィールドに関してデータベースのテーブルと同じ正確なフォーマットでMemory DataTableカラムを作成します。だから私は列マッピングをしていません。私のPKレコードは、一意の値制約を持つGUIDであり、PKIDと呼ばれます。私は、ディスク上のCSVファイルからDataTableを埋め込み、BulkCopyを実行します。

私の考えは、次のロジックを実行しようとしています: Delete from MemoryDataTable PKIDが入っている場所(SQLTableのSELECT PKID)

ここに私のコードです:

            Try
            Using sqlBulk As New SqlBulkCopy(LocalDBConnectionString, SqlBulkCopyOptions.TableLock)
                sqlBulk.DestinationTableName = "DataRecords"
                sqlBulk.BatchSize = 5000
                sqlBulk.WriteToServer(MemoryDataTable)
                sqlBulk.Close()
            End Using
            Catch ex As Exception
            EventArgs.ErrorMessage = ex.Message
            ''''Catch Primary Key Violation Here''''
            End Try

人気のある回答

ありがとう、それは良いオプションになることができます。しかし、私がやろうとしていたことを成し遂げました:) catchセクションでは、ライブDBテーブルのすべてのPKをDataReaderに選択しました。次に、読者が返す行をループします。各ループでは、MemoryDataTable.rows.findメソッドを使用して、MemoryDataTableにDataReader行が存在するかどうかを確認します(存在する場合は削除します)。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ