La suppression de l'index cluster supprime PK à partir de la colonne
Si je supprimer un index ordonné en clusters (ensemble sur la pharmacocinétique de la colonne), il supprime le PK de l'attribut de la définition de la colonne. Quel est le deal?
Si j'ai un index non ordonné en clusters sur la table et j'ai supprimer l'index cluster, puis il ne retirez PAS le PK de l'attribut de la définition de la colonne
Quelle est la définition de l'index cluster, et comment avez-vous supprimer?
Juste une colonne d'ID de l'auto incrément défini comme PK. Index cluster est à la fois créé automatiquement lors de la configuration de PK et créé manuellement à l'aide de "Unique" case à cocher et le choix de la colonne ID
Juste une colonne d'ID de l'auto incrément défini comme PK. Index cluster est à la fois créé automatiquement lors de la configuration de PK et créé manuellement à l'aide de "Unique" case à cocher et le choix de la colonne ID
OriginalL'auteur Dustin Davis | 2011-03-17
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que vous faites cela depuis l'interface utilisateur de l'outil et non pas de l'instruction SQL.
Ce qui se passe réellement lorsque vous essayez de supprimer l'index cluster qui a été défini sur un penalty, il va faire un ALTER TABLE DROP CONSTRAINT en premier, car il ne sera pas en mesure de faire la BAISSE de l'INDICE de relevé sur un indice qui est utilisé par le PK (voir cet article MSDN, deuxième alinéa). Vous ne devriez pas être en mesure de le faire avec index Non-Cluster.
Voici un exemple... j'ai créé une table Foo:
cela va créer automatiquement un index cluster (c'est à dire PK_foo_3213EXXXXXXXXX)
Essayer de le faire à partir de l'outil (SQL Management studio):
Clic droit sur le PK_foo_3213EXXXXXXXX index de la table et de faire le Script de l'Indice -> DROP... et voir ce qu'il va générer...
C'est en fait à ceci:
Dire si j'ajoute un autre indice (unique non-cluster) à la table de la sorte:
Et faire la même chose (Script DROP), c'est le script qui sera généré:
Remarque la différence (le précédent est ALTER TABLE DROP CONSTRAINT, et le plus tard, c'est une GOUTTE d'INDEX).
Si vous essayez de forcer SQL pour ce faire sur la pharmacocinétique de l'index cluster:
vous obtiendrez ceci:
Msg 3723, Niveau 16, État 4, Ligne 1
Explicite d'une BAISSE de l'INDICE n'est pas autorisée sur l'indice de dbo.foo.PK_foo_3213E83F7F60ED59'. Il est utilisé pour la contrainte de CLÉ PRIMAIRE d'application.
Donc SQL est obligé de faire de la CHUTE de CONTRAINTE de place.
Je ne suis pas sûr de ce que vous voulez dire par votre deuxième instruction if... si vous voulez dire que vous avez défini un penalty sur un index non-cluster et vous avez un autre index cluster qui n'est pas le PK et de l'index cluster... alors oui... c'est le comportement qui va se passer (votre PK contrainte ne sera pas supprimée).
Pour le plaisir souci, essayez de script DROP INDEX sur le PK c'est sur un index non-cluster... et devinez ce script, il va générer :). Hint Hint... ALTER TABLE .... DÉPOSER ... CONTRAINTE
OriginalL'auteur Jimmy Chandra