我如何修改我的 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无法启动