Как удалить уникальный индекс, на который ссылаются внешние ключи? - PullRequest
3 голосов
/ 24 декабря 2009

У меня есть таблица, назовем ее Users. Эта таблица имеет первичный ключ с именем Id. Несмотря на наличие Id в качестве первичного ключа (уникальный кластеризованный), он имеет другой индекс (уникальный некластеризованный) для того же столбца (Id).

Я бы хотел снять это ограничение, но внешние ключи ссылаются на этот уникальный некластеризованный индекс, и я получаю The constraint ... is being referenced by table... ошибку.

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

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

Чтобы удалить некластеризованный индекс, на который ссылается внешний ключ, необходимо удалить ограничение внешнего ключа.

Взгляните на следующие заметки, которые можно найти на плакате в SQL Server Central. Они могут потребовать некоторой настройки для ваших «точных» требований, однако они обеспечивают основу для написания сценариев и последующей перестройки внешних ключей.

Вычеркнуть иностранные ключи

1 голос
/ 24 декабря 2009

Двухиндексный подход может иметь смысл:

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

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

...