SQL Server: как написать оператор изменения индекса, чтобы добавить столбец в уникальный индекс? - PullRequest
48 голосов
/ 19 марта 2012

У меня есть индекс UNIQUE, NON CLUSTERED для таблицы, которая в настоящее время использует 4 столбца для индекса.

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

База данных - SQL Server 2005.

Заранее спасибо.

Ответы [ 2 ]

76 голосов
/ 19 марта 2012

Вы не можете изменить индекс - все, что вы можете сделать, это

  1. сбросить старый индекс (DROP INDEX (indexname) ON (tablename))
  2. пересоздать новый индекс с дополнительным столбцом в нем:

      CREATE UNIQUE NONCLUSTERED INDEX (indexname)
      ON dbo.YourTableName(columns to include)
    

Оператор ALTER INDEX в SQL Server доступен для изменения определенных свойств (свойств хранилища и т. Д.) Существующего индекса, но он не допускает изменений в столбцах, составляющих индекс.

3 голосов
/ 16 октября 2015

Если новый столбец, который вы добавляете в индекс, находится в конце списка столбцов - другими словами, если список столбцов старого индекса является префиксом списка столбцов нового индекса - тогда строки, которые сортируются по старым столбцам, по-прежнему сортируются по новым столбцам. В Sybase SQL Server и, возможно, в более старых версиях Microsoft SQL Server была опция with sorted_data, позволяющая вам объявить, что строки уже отсортированы. Но на MSSQL 2008 R2 это никак не сказывается; опция принята, но молча игнорируется. В любом случае, я думаю, что эта опция была в основном полезна для кластерных индексов.

Другие упоминали with drop_existing, что звучит замечательно, но только для более дорогих версий MSSQL.

...