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

时间:2014-04-17 13:50:36

标签: sql sql-server-2008-r2

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

3 个答案:

答案 0 :(得分:1)

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

ON UPDATE CASCADE

有关详细信息,请参阅this article

编辑根据您的评论,如果您想更改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

答案 1 :(得分:1)

看起来你正在寻找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)

答案 2 :(得分:1)

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

父表是TableB。该表不需要采取任何行动。

在TableA上,您必须:

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

    编辑从这里开始

    Here是语法链接