Удаление повторяющихся строк из таблицы в SQL Server

Таблицы Microsoft SQL Server никогда не должны содержать повторяющихся строк и неуникальных первичных ключей. Ради краткости в этой статье первичные ключи иногда называются просто ключами. Повторяющиеся ключи нарушают целостность объектов и должны быть запрещены в реляционной системе. SQL Server содержит ряд механизмов, обеспечивающих целостность объектов, включая индексы, ограничения UNIQUE, ограничения PRIMARY KEY и триггеры.

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

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

Msg 1505, Level 16, State 1 Create unique index aborted on duplicate key.

Если используется SQL Server 2000 или SQL Server 2005, может быть выведено следующее сообщение об ошибке.

Сообщение 1505, уровень 16, состояние 1 Операция CREATE UNIQUE INDEX прервана, так как обнаружен повторяющийся ключ для имени объекта «%1!s!» и имени индекса «%2!s!». Повторяющееся значение ключа: %ls.

В данной статье рассматривается процедура обнаружения и удаления из таблицы повторяющихся первичных ключей. Однако при обнаружении повторяющихся ключей следует также тщательно изучить процедуру их появления, чтобы предотвратить возникновение этой проблемы в будущем.

Дополнительная информация:

Проблема дублирования ключей будет рассмотрена на примере следующей таблицы с по...

Проблема дублирования ключей будет рассмотрена на примере следующей таблицы с повторяющимся первичным ключом. В данной таблице первичным ключом являются два столбца (col1, col2). Создать уникальный индекс или ограничение PRIMARY KEY в данном случае невозможно, поскольку две строки имеют повторяющиеся первичные ключи. Для обнаружения и удаления дубликатов можно воспользоваться процедурой, описанной ниже.

create table t1 (col1 int, col2 int, col3 char (50))

1 2 3

Короткий URL: http://www.admingroup.ru/?p=5195

Написал в Апр 19 2011. Соответствие MSSQL сервер и MYSQL сервер, Администрирование. Вы можете перейти к обсуждениям записи RSS 2.0. Все комментарии и пинги в настоящее время запрещены.

Комментарии закрыты

Всё для спорта и отдыха!

Создание сайтов ABS GROUPS