Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 依赖列上的ALTER表_Sql Server 2008_Alter Table_Alter Column - Fatal编程技术网

Sql server 2008 依赖列上的ALTER表

Sql server 2008 依赖列上的ALTER表,sql-server-2008,alter-table,alter-column,Sql Server 2008,Alter Table,Alter Column,我试图将主键的列数据类型从int改为tinyint。此列是其他表中的外键。因此,我得到以下错误: Msg 5074,16级,状态1,第1行对象“PK_User_tbl”为 依赖于列“appId”。Msg 5074,16级,状态1,第1行 对象“FK\u详细信息\u tbl\u用户\u tbl”依赖于列“appId”。味精 5074,第16级,状态1,第1行对象“FK_Log_tbl_User_tbl”为 依赖于列“appId”。味精4922,第16级,第9状态,第1行 表ALTER列appId

我试图将主键的列数据类型从int改为tinyint。此列是其他表中的外键。因此,我得到以下错误:


Msg 5074,16级,状态1,第1行对象“PK_User_tbl”为 依赖于列“appId”。Msg 5074,16级,状态1,第1行 对象“FK\u详细信息\u tbl\u用户\u tbl”依赖于列“appId”。味精 5074,第16级,状态1,第1行对象“FK_Log_tbl_User_tbl”为 依赖于列“appId”。味精4922,第16级,第9状态,第1行 表ALTER列appId失败,因为一个或多个对象访问 这个专栏



除了删除依赖项并重新创建它们,还有其他方法吗?

我认为您必须先删除外键约束。然后更新所有适当的表并按原样重新映射它们

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限制。请注意:)

如果您的约束是针对某个用户类型的,那么不要忘记查看是否存在
默认约束
,通常类似于
DF_uuutablename\uu ColumnName\uu 6BAEFA67
,如果是这样,则需要删除
默认约束
,如下所示:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

欲了解更多信息,请参阅杰出的亚伦·伯特兰在上的评论。

您可以放弃限制您的约束。如果该列可以访问其他表。假设一个视图正在访问您正在修改的列,那么它将不允许您修改该列,除非您删除该视图。进行更改后,可以重新创建视图


只是澄清一下-DROP CONSTRAINT命令必须在Visual Studio中的数据上下文中(而不是在SQL MS中的实际SQL DB中)作为对表的查询执行。(我必须以艰难的方式找到答案,因为我是这方面的新手,所以我想其他人可能会觉得这一澄清很有用)。@Andarta:非常感谢你的警告,但是sql server management studio中的“数据上下文”是什么?我遇到过这样的情况:约束不允许我更改列,但我不能删除该约束,因为SQLSERVER告诉我它不存在@realtebo-“数据上下文”指的是您在Visual Studio的服务器资源管理器中看到的数据连接上下文。因此,与其尝试在SSMS中删除约束,不如尝试在visual studio中执行该操作。在SSMS中,您将发现右键单击索引并选择“为索引创建脚本>为>中的插入语句生成代码”非常方便,您简直棒极了!如果你不右键点击表格>>设计,然后更新适合我的字体,我今晚就睡不着了。