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

- 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

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21

- Onedrive Sync Engine Host : CPU à 100% par Le petit blog de Pierre / Pierre's little blog le 08-06-2014, 22:22

- SharePoint : Bug sur la gestion des permissions et la synchronisation Office par Blog Technique de Romelard Fabrice le 07-10-2014, 11:35

- SharePoint 2007 : La gestion des permissions pour les Workflows par Blog Technique de Romelard Fabrice le 07-08-2014, 11:27

- TypeMock: mock everything! par Fathi Bellahcene le 07-07-2014, 17:06

- Coding is like Read par Aurélien GALTIER le 07-01-2014, 15:30

- Mes vidéos autour des nouveautés VS 2013 par Fathi Bellahcene le 06-30-2014, 20:52

- Recherche un passionné .NET par Tkfé le 06-16-2014, 12:22

- [CodePlex] Projet KISS Workflow Foundation lancé par Blog de Jérémy Jeanson le 06-08-2014, 22:25