web-dev-qa-db-fra.com

SQL Server: comment écrire une instruction alter index pour ajouter une colonne à l'index unique?

J'ai un UNIQUE, NON CLUSTERED index sur une table qui utilise actuellement 4 colonnes pour l'index.

Je veux créer un script alter qui peut simplement ajouter une autre colonne à cet index. Le nouveau type de colonne est varchar.

La base de données est SQL Server 2005.

Merci d'avance.

48
JL.

Vous ne pouvez pas modifier un index - tout ce que vous pouvez faire est

  1. supprimer l'ancien index (DROP INDEX (indexname) ON (tablename))
  2. recréez le nouvel index avec la colonne supplémentaire:

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

Le ALTER INDEX dans SQL Server est disponible pour modifier certaines propriétés (propriétés de stockage, etc.) d'un index existant, mais elle ne permet pas de modifier les colonnes qui composent l'index.

76
marc_s

Si la nouvelle colonne que vous ajoutez à l'index se trouve à la fin de la liste des colonnes - en d'autres termes, si la liste des colonnes de l'ancien index est un préfixe de la liste des colonnes du nouvel index - alors des lignes qui sont triées par les anciennes colonnes seront toujours triées selon les nouvelles colonnes. Dans Sybase SQL Server et peut-être d'anciennes versions de Microsoft SQL Server, il y avait un with sorted_data option pour vous permettre de déclarer que les lignes ont déjà été triées. Mais sur MSSQL 2008 R2, cela semble n'avoir aucun effet; l'option est acceptée mais silencieusement ignorée. En tout cas, je pense que l'option était surtout utile avec les index clusterisés.

D'autres ont mentionné with drop_existing, ce qui sonne bien, mais ne concerne que les versions plus chères de MSSQL.

3
Ed Avis