我如何修改我的 Sql server 2008 r2 FK 的父表

Posted

技术标签:

【中文标题】我如何修改我的 Sql server 2008 r2 FK 的父表【英文标题】:How i can modify the Parent table for my Sql server 2008 r2 FK 【发布时间】:2014-04-17 13:50:35 【问题描述】:

我的表中有一个 FK,但我想修改 FK 的父表。那么有没有改变命令可以实现这一点?或者我需要删除 FK 并创建一个新的? 谢谢

【问题讨论】:

修改的本质是什么? 你的意思是改变列配置还是列数据? 我想改变FK所指的父表,我不是在谈论数据,我想要改变FK所指的父表 我想要列配置... 您到底想在父表中修改什么?在我看来,你需要一个alter 声明。 【参考方案1】:

将此添加到您的 PK 中,它会自动为您更新所有 FK:

ON UPDATE CASCADE

完整详情,请阅读this article。

EDIT根据您的评论,如果您要更改PK数据类型,则取决于更改:

如果旧类型可以隐式转换为新类型而不会造成任何损失:
    先更改PK类型。 将 FK 类型更改为相同。
如果不能将旧类型隐式转换为新类型而不会造成任何损失:
    首先打破关系(即删除 FK 限制/索引)。 转换 PK。如果需要修改数据,请将旧值和新值都保存在临时表中。 转换 FK。如果在上一步中更改了 PK 数据,请使用临时表中的映射值更新 FK。 再次创建关系(即创建 FK 限制/索引)。

修改数据类型,使用ALTER命令,语法为:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

例子:

ALTER TABLE table_name
ALTER COLUMN id NUMBER(10,2);

ALTER TABLE table_name
ALTER COLUMN id VARCHAR(20);

更多详情,请阅读this article。

【讨论】:

我想更改我的 FK 所指的父表?我不想更改数据..【参考方案2】:

看起来您正在寻找alter 声明,但由于您没有确切提及您要修改的内容;我假设您想更改列数据类型的大小。你可以这样做(一个例子;假设你想将大小从 10 更改为 15)

alter table sample3 
alter column name varchar(15)

编辑:

在这种情况下,这就是你应该做的。您需要删除现有约束并重新创建约束以指向TableC

alter table TableA
drop constraint your_FK_constraint_name

alter table TableA
add constraint constraint_name 
FOREIGN KEY (column_name) references TableC(some other column name)

一个例子:

alter table sample2
drop constraint FK__sample2__realnam__09DE7BCC

alter table sample2
add constraint FK__sample2__realnam 
FOREIGN KEY (realname) references sample1(name)

【讨论】:

@johnG,是的,这就是应该做的事情,而且只能按照这个顺序。就像我在我编辑的答案中发布的一样。另外,如果有帮助,请不要忘记将其标记为答案。【参考方案3】:

基于此评论,“现在我在 TableA 中的当前 FK 引用另一个表主键 TableB。但我需要修改我当前的 FK 以引用 tableC 而不是 tableB ...这就是我需要的(修改我的 FK 的父表)– "

父表是TableB。无需对该表执行任何操作。

在 TableA 上,您必须:

    删除现有的外键约束。 根据需要进行更新,以使适用列中的所有值在 TableC 中具有匹配值。 添加新的外键约束。

按这个顺序。

编辑从这里开始

Here 是语法的链接,

【讨论】:

以上是关于我如何修改我的 Sql server 2008 r2 FK 的父表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?

SQL Server 2008 R2 Express 权限——不能创建数据库或修改用户

如何修改SQL Server 2008 R2数据库的内存

服务器管理员密码修改后SQL_Server_2008无法启动

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)

我的 R 代码没有从 SQL Server 获取数据