Пропуск совершенно одинаковых записей в SQL Server - PullRequest
1 голос
/ 14 июня 2011

У меня есть набор текстовых файлов, которые я импортирую в SQL Server через SqBulkCopy в C #. Есть несколько записей, которые появляются в нескольких записях, и я хотел бы пропустить их, а не выдавать ошибку и останавливаться.

В тех случаях, когда есть четкий уникальный ключ / первичный ключ, все хорошо - я использовал «WITH (IGNORE_DUP_KEY = ON)» с хорошим эффектом.

В этом случае, однако, такой уникальный идентификатор не может быть определен, за исключением объединения ВСЕХ полей или создания составного ключа, включающего все поля. Я пытался получить уникальный ID транзакции или подобное, но ни один не доступен. Иногда записи совпадают, но одна цифра в поле изменилась; в этом случае я хочу вставить его в таблицу.

Я полагаю, что может быть лучший подход, чем создание ключа для всех полей? Если бы я сделал это, это означало бы, что даты, строки, значения и т. Д. Должны были бы быть смешаны для формирования ключа.

Запрос строк и хеширование значений для сравнения с хэшем моей входной строки было другой мыслью, но производительность была бы ужасной, я уверен:)

У кого-нибудь есть предложения, как лучше всего это сделать?

Спасибо

Ответы [ 2 ]

5 голосов
/ 14 июня 2011

Если вы импортируете, вы можете просто сделать этап, который устраняет дублирование данных, вставив во временную таблицу, имеющую ту же схему, что и ваша таблица назначения, а затем выполнив запрос SELECT DISTINCT, вставив Результаты этого запроса в вашей конечной таблице назначения. Если вы не говорите о десятках миллионов строк, это должно работать нормально, поскольку его нужно запустить всего один раз.

2 голосов
/ 14 июня 2011

Вы можете использовать ИСКЛЮЧИТЬ:

insert into TargetTable
select fieldlist from SourceTable
except
select fieldlist from TargetTable;
...