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

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le il y a 14 heures et 22 minutes

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le il y a 16 heures et 13 minutes

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le il y a 20 heures et 3 minutes

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le il y a 20 heures et 9 minutes

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le il y a 20 heures et 45 minutes

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21

- SharePoint : Incompatibilité avec Internet Explorer 10 (IE10) par Blog Technique de Romelard Fabrice le 05-08-2013, 16:29

- AutoSPInstaller pour SharePoint 2013 maintenant disponible en “RTM” par Julien Chable le 05-06-2013, 23:30