Pour une table de produits avec un PK non clusterisé, et aucun index cluster: est-il possible d'utiliser ALTER INDEX..REBUILD
(ou toute autre méthode simple) pour transformer le PK NON CLUSTERED
en un CLUSTERED
? Comment ?
Je serais ravi d'éviter un DROP, car il y a d'autres tables avec des contraintes qui m'empêchent d'abandonner les produits PK.
MODIFIER:
J'ai trouvé qu'en utilisant TOAD pour SQL Server (j'ai l' édition communautaire gratuite), je peux cliquer droit sur un tableau, sélectionner Modifier table, changer Clustered de False à True et il génère un script effrayant – mais fonctionnel, où il crée un nouveau table, copy des données, supprime et recréer / renommer tout ce dont il a besoin.
Cependant, j'espère toujours qu'il est recommandé de le faire avec un outil spécial
Vous pouvez créer l'index cluster en utilisant l'option DROP_EXISTING = ON
. Vous pouvez également créer une key primaire de cette façon si vous préférez le faire.
BEGIN TRAN SELECT * INTO o FROM sys.objects CREATE UNIQUE NONCLUSTERED INDEX sjhfg ON o (object_ID) CREATE UNIQUE CLUSTERED INDEX sjhfg ON o (object_ID) WITH (DROP_EXISTING = ON) SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('o') ROLLBACK
La majorité des articles / réponses indiquent que ce n'est pas possible. Cependant, comme indiqué dans la réponse de @usr, il est possible de convertir un index NonClustered en un index clusterisé. Puisque nous traitons avec un PK, cela nécessite:
Si cette table est très volumineuse et que vous ne pouvez pas vous permettre de verrouiller cette table, ou si vous ne pouvez pas vous permettre la possibilité de données orphelines pour les opérations effectuées sur les tables associées pendant cette opération, procédez comme suit réduire le time nécessaire pour effectuer le changement: