Ne peut pas drop index UNIQUE à partir de la table
Lorsque j'exécute cette requête
ALTER TABLE "dbo"."ROOM" DROP INDEX "UNIQUE";
J'ai eu ce message:
Erreur 1018: syntaxe Incorrecte près de 'INDEX'. Si c'est prévu qu'une partie d'un indicateur de table, AVEC UN mot-clé et les parenthèses sont maintenant nécessaires. Voir la documentation en Ligne SQL Server pour la bonne syntaxe.
Le nom de l'index unique est, à juste titre, UNIQUE
. Je pense que c'est le problème, et c'est un nom généré automatiquement (pour le client de SQL Server qui a été utilisé pour créer cet index). C'est le create table phrase:
CREATE TABLE "ROOM" (
"ID" BIGINT NOT NULL DEFAULT NULL,
//the rest of the columns...
"ROOM" VARCHAR(100),
UNIQUE INDEX "UNIQUE" ("ROOM")
)
;
Une idée de comment puis-je supprimer cet indice? Je sais que je peux supprimer la table, et de le créer encore une fois, je veux l'éviter.
- "Le nom de l'index unique est, à juste titre, UNIQUE.". C'est un terrible nom de l'index. Je voudrais utiliser
idx_room_room
, ouidxu_room_room
pour le nom de l'index. - Pourquoi avez-vous une ID de colonne définie comme not NULL par défaut est NULL???? Que ne fait absolument aucun sens. Cette chose cris d'être dans le besoin sérieux d'une refonte complète.
- "et c'est un nom généré automatiquement": "je suis prêt à parier n'importe quoi que SQL Server n'a pas d'auto-générer le nom "Unique" pour l'index.
- Tout à fait raison. Mais que de créer la table peut-être est générée automatiquement par le client de sql server que je suis en utilisant..
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour utiliser cette instruction:
Vous avez besoin de déplacer l'index, et également définir le tableau, il a été créé ... et puisque son nom est réservé le mot clé SQL, vous devez mettre dans des crochets (
[UNIQUE]
).Voir le officiel de la documentation MSDN sur
DROP INDEX
pour plus de détailsMise à jour: si cette déclaration ne fonctionne pas, alors que l'indice de n'est pas appelé
UNIQUE
après tout.Vérifier ce que les index sont définis sur la
Room
table avec cette déclaration:et de regarder la
Name
colonne - ensuite, utilisez les approprié, réels le nom de l'index à la baisse de l'indice.Mise à jour #2: OK, donc vous vraiment ont une contrainte unique, qui est appliquée par l'index unique. Afin de se débarrasser de cela, vous devez d'abord savoir ce que la contrainte est appelée, et qui table, c'est sur:
Une fois que vous avez ces deux informations, vous pouvez maintenant déposer cette contrainte:
et puis votre index unique sera parti.
Room
sont vraiment appelés avec cette commande:SELECT * FROM sys.indexes WHERE object_id=OBJECT_ID('dbo.Room')
- je doute que le nom de l'index est vraimentUNIQUE
.... utilisez le approprié, réels le nom de l'index ....