ALTER上依赖列表

问题描述 投票:42回答:3

我试图改变主键的列数据类型从int.This列TINYINT在其他tables.So外键,我得到以下错误:


消息5074,级别16,状态1,行1对象“PK_User_tbl”是依赖于列“APPID”。消息5074,级别16,状态1,行1对象“FK_Details_tbl_User_tbl”是依赖于列“APPID”。消息5074,级别16,状态1,行1对象“FK_Log_tbl_User_tbl”是依赖于列“APPID”。消息4922,级别16,状态9,行1 ALTER TABLE ALTER COLUMN的appid失败,因为一个或多个对象访问此列。


是否有任何其他方式以外删除依赖关系并重新创建它们?

sql-server-2008 alter-table alter-column
3个回答
77
投票

我相信,你必须先删除外键约束。然后更新所有相应的表,并重新映射他们,因为他们是。

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

但是,除非内存是一个非常大的问题,我会继续的身份为INT。除非你是100%肯定,你的钥匙永远不会过去TINYINT约束。谨慎的只是一个字:)


37
投票

如果你的约束是对一个用户类型,然后别忘了看看是否有一个Default Constraint,通常像DF__TableName__ColumnName__6BAEFA67,如果是的话,那么你将需要删除Default Constraint,就像这样:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

欲了解更多信息请参阅的辉煌阿龙贝特朗上this answer的意见。


0
投票

你可以将它限制你的约束。如果列有访问其他表。假设一个视图访问您正在改变则列它不会让除非你删除视图你改变了列。并进行更改后,你可以重新创建视图。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.