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?
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 :)
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 .
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.