web-dev-qa-db-fra.com

ALTER TABLE sur colonne dépendante

J'essaie de modifier le type de données de colonne d'une clé primaire en tinyint à partir de int.Cette colonne est une clé étrangère dans d'autres tables.Alors, j'obtiens l'erreur suivante:


Msg 5074, niveau 16, état 1, ligne 1 L'objet 'PK_User_tbl' est dépend de la colonne 'appId'. Msg 5074, niveau 16, état 1, ligne 1 Le L'objet 'FK_Details_tbl_User_tbl' dépend de la colonne 'appId'. Msg 5074, niveau 16, état 1, ligne 1 L'objet 'FK_Log_tbl_User_tbl' est dépend de la colonne 'appId'. Msg 4922, niveau 16, état 9, ligne 1 ALTER TABLE ALTER COLUMN appId a échoué car un ou plusieurs objets ont accès cette colonne.


Existe-t-il un autre moyen que de supprimer les dépendances et de les recréer?

40
Milee

Je crois que vous devrez supprimer les contraintes de clé étrangère en premier. Puis mettez à jour toutes les tables appropriées et remappez-les comme elles étaient.

ALTER TABLE [dbo.Details_tbl] DROP CONSTRAINT [FK_Details_tbl_User_tbl];
-- Perform more appropriate alters
ALTER TABLE [dbo.Details_tbl] ADD FOREIGN KEY (FK_Details_tbl_User_tbl) 
    REFERENCES User_tbl(appId);
-- Perform all appropriate alters to bring the key constraints back

Cependant, à moins que la mémoire ne soit vraiment un gros problème, je conserverais l'identité en tant qu'INT. À moins que vous ne soyez sûr à 100% que vos clés ne dépasseront jamais les restrictions TINYINT. Juste un mot de prudence :)

71
Justin Pihony

Si votre contrainte concerne un type d'utilisateur, n'oubliez pas de voir s'il existe un Default Constraint, généralement quelque chose comme DF__TableName__ColumnName__6BAEFA67. Si c'est le cas, vous devrez supprimer le Default Constraint, comme ceci:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

Pour plus d’informations, voir les commentaires du brillant Aaron Bertrand sur cette réponse .

36
Serj Sagan

vous pouvez supprimer la contrainte qui vous restreint. Si la colonne a accès à une autre table. Supposons qu'une vue accède à la colonne que vous modifiez alors elle ne vous laissera pas modifier la colonne à moins que vous ne la supprimiez. et après avoir apporté des modifications, vous pouvez recréer la vue.

 enter image description here

0
Santosh