Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Modifier l’index d’une contrainte sans la supprimer

Le moteur de base de données, prend certaines libertés comme celle d'ajouter un index systématiquement aux contraintes de types UNIQUE ou PRIMARY KEY ce qui lui permet de d'assurer que les valeurs contenues dans ces dernières sont bien uniques.

Mais que ce passe t'il le jour où vous souhaitez modifier le type d'index d'une contrainte (le changer de Clustered à NonClustered par exemple) sans toucher à la contrainte. Il est vrai que supprimer la contrainte serait la solution de facilité mais dans le cas où celle-ci est liée à un grand nombre d'autres tables par des clefs étrangères cela se révèlera être un enfer.

Il y a une solution plus simple :

1. On cherche le nom de l'index qui est créée par notre contrainte (c'est là qu'on se rend compte que plus facile de les nommer soit même)

SELECT name FROM sys.indexes
WHERE is_primary_key = 1 AND object_id = OBJECT_ID('dbo.MaTable')

Les vues systèmes utilisées existent depuis SQL Server 2005 uniquement.
On change is_primary_key par is_unique_constraint en function de ce que l'on souhaite modifier.

2. On écrase cet index avec la syntaxe appropriée (syntaxe valable depuis SQL Server 2000)

-- Remplacer par le nom de l'index trouvé si dessus
CREATE UNIQUE NONCLUSTERED INDEX PK__dbo_MaTable__6F7AF90B ON dbo.MaTable(Id)
WITH (DROP_EXISTING = ON)

La clause UNIQUE est indispensable. Ici j'ai pris le cas où je souhaite transformer mon index de celf primaire de Clustered (valeur par défaut pour une clef primaire) en NonClustered. Le DROP_EXISTING indique au moteur que ce n'est pas une création d'index en tant que tel mais que l'on souhaite remplacer cet index.

Le tour est joué, le nouvel index est créé !

Bonne indexation…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié mardi 3 février 2009 10:33 par christian
Classé sous :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau blog en anglais / New blog in english ! par Le blog de Patrick [MVP SharePoint] le 09-18-2014, 18:42

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31