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

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

【问题讨论】:

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

标签: sql sql-server-2008-r2


【解决方案1】:

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

ON UPDATE CASCADE

完整详情,请阅读this article

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

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

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

按这个顺序。

编辑从这里开始

Here 是语法的链接,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 2011-05-22
    • 2015-12-02
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多