Я получаю ежедневный XML файл, содержащий тысячи записей, каждый из которых является бизнес-транзакцией, которую я должен хранить во внутренней базе данных для использования в отчетности и биллинге. У меня создалось впечатление, что каждый день файл содержит только уникальные записи, но обнаружил, что мое определение уникальности не совсем то же самое, что и у провайдера.
Текущее приложение, которое импортирует эти данные, является консольным приложением С#.Net 3.5, оно делает это с использованием SqlBulkCopy в таблице базы данных MS SQL Server 2008, где столбцы точно соответствуют структуре записей XML. Каждая запись имеет только более 100 полей, и в данных нет естественного ключа, или, скорее, поля, которые я могу придумать, как составной ключ, также должны иметь нулевые значения. В настоящее время таблица имеет несколько индексов, но не первичный ключ.
В принципе, вся строка должна быть уникальной. Если одно поле отличается, оно достаточно допустимо для вставки. Я посмотрел на создание хэша MD5 всей строки, вставив его в базу данных и используя ограничение, чтобы предотвратить включение SqlBulkCopy строки, но я не вижу, как получить MD5 Hash в операции BulkCopy, и я не убедитесь, что вся операция завершится неудачно и откат, если какая-либо одна запись не удалась, или если она будет продолжена.
Файл содержит очень большое количество записей, идущих по строке в XML, запрос базы данных для записи, соответствующей всем полям, а затем принятие решения о вставке - это действительно единственный способ увидеть, что я могу это сделать, Я просто надеялся не переписывать приложение полностью, а операция массовой копии намного быстрее.
Кто-нибудь знает, как использовать SqlBulkCopy, предотвращая дублирование строк без первичного ключа? Или любое предложение для другого способа сделать это?