sql server 2008 - modificar - ALTER TABLE en la columna dependiente
alter table sql server ejemplo (2)
Estoy tratando de alterar el tipo de datos de la columna de una clave principal a tinyint desde int. Esta columna es una clave externa en otras tablas. Por lo tanto, me sale el siguiente error:
Msg 5074, nivel 16, estado 1, línea 1 El objeto ''PK_User_tbl'' depende de la columna ''appId''. Msg 5074, nivel 16, estado 1, línea 1 El objeto ''FK_Details_tbl_User_tbl'' depende de la columna ''appId''. Msg 5074, nivel 16, estado 1, línea 1 El objeto ''FK_Log_tbl_User_tbl'' depende de la columna ''appId''. Msg 4922, nivel 16, estado 9, línea 1 ALTER TABLE ALTER COLUMN appId falló porque uno o más objetos acceden a esta columna.
¿Hay alguna otra forma que no sea eliminar dependencias y volver a crearlas?
Creo que primero tendrá que eliminar las restricciones de clave externa. Luego actualice todas las tablas apropiadas y vuelva a asignarlas como estaban.
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
Sin embargo, a menos que la memoria sea realmente un gran problema, mantendría la identidad como INT. A menos que esté 100% seguro de que sus llaves nunca crecerán más allá de las restricciones TINYINT. Solo una palabra de advertencia :)
Si su restricción está en un tipo de usuario, entonces no se olvide de ver si hay una Default Constraint
, generalmente algo como DF__TableName__ColumnName__6BAEFA67
, si es así, tendrá que soltar la Default Constraint
, como esta:
ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]
Para obtener más información, consulte los comentarios del brillante Aaron Bertrand sobre esta respuesta .