Rebuild un PK non clusterisé en un cluster?

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:

  • d'abord abandonner tous les FK qui font reference à cette PK
  • Ignorer la partie contrainte du PK et simplement recréer la partie index du PK comme UNIQUE GRAPPES
  • Enfin, recréer tous les FK qui ont été déposés à l'étape 1

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:

  1. Créer une table en double nommée [CurrentName_new] avec un PK en cluster
  2. Migrer datatables
  3. Supprimez et recréez les keys FK sur les tables dépendantes pour qu'elles pointent vers la nouvelle table
  4. Renommez la table en cours à [CurrentName_old]
  5. Renommez la nouvelle table en [NomActuel]