2015-09-29 13 views
1

Недавно я обнаружил ошибку в клиентском API. Он отправляет страницы уникальных записей на основе временных меток. Каждый так часто он отправляет ту же самую точную запись в конце предыдущей страницы и начинает следующую страницу.MS SQL Server - как игнорировать/удалять очень редкие повторяющиеся строки во время вставки таблицы

Я работал в соответствии с предположением, что дубликатов не было (это журнал событий в конце концов). Поэтому я делал чистые вставки, вместо того чтобы переживать проблему обновления или какой-то «дубликат».

Мой вопрос --- какой лучший способ избавиться от этих дубликатов, а затем MS SQL спокойно отбросить эти дубликаты записей при вставке? Они обязательно вставлены ПОСЛЕ того, как оригинал был написан в транзакции. Эти дубликаты случаются раз каждые 10 000 строк - так что-то очень свет памяти будет замечательным.

Единственная отличительная часть записей - «идентификатор партии ETL» - все остальное идентично. В противном случае каждая запись должна иметь уникальный «идентификатор события». Если я сделаю этот идентификатор события уникальным индексом/ключом, могу ли я каким-то образом заставить MS SQL сбрасывать любые дубликаты ключей? Или приложение выведет сообщение об ошибке и остановится во время запроса?

ответ

0

У вас есть пресловутый параметр индекса IGNORE_DUP_KEY, который отвечает на ваш вопрос. Если попытаться избежать использования, потому что он изменяет семантику в этом очень тонком и труднодоступном пути.

Это очень эффективный способ: http://blogs.msdn.com/b/craigfr/archive/2008/01/30/maintaining-unique-indexes-with-ignore-dup-key.aspx и http://sqlblog.com/blogs/paul_white/archive/2013/02/01/a-creative-use-of-ignore-dup-key.aspx.

Если я делаю это событие уникальным индексом/ключом, могу ли я каким-то образом заставить MS SQL сбрасывать любые дубликаты ключей? Или приложение выведет сообщение об ошибке и остановится во время запроса?

Да, вставка не удалась. Это наиболее предпочтительный вариант в большинстве ситуаций. Если вы не можете сделать эту работу IGNORE_DUP_KEY, возможно, следующая лучшая вещь.

+0

правильно, если ignore_dup_key не рекомендуется, какая у меня альтернатива? предотвратить дублирование ключей от доступа к базе данных? Я думаю, что процесс, на любом языке программирования или даже поиск обновлений с БД, резко замедлит процесс. – user45867

+0

Что делать, если вы отслеживаете последнюю запись предыдущей страницы и сравниваете ее с первой записью текущей страницы? Если вы уверены, что шаблон всегда «последняя запись страницы дублируется первой записью следующей страницы». –

+0

Вы также можете попросить владельца API-клиента исправить свою ошибку :) Они могут не знать, что это существует, или у них может быть решение/обход. –