Подтвердить что ты не робот

SQL Server: как написать инструкцию alter index, чтобы добавить столбец в уникальный индекс?

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

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

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

Спасибо заранее.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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