name modificar ejemplo constraint columna column sql-server-2008 alter-table alter-column

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 .