繁体   English   中英

如何修改SQL Server 2008 R2 FK的父表

[英]How i can modify the Parent table for my Sql server 2008 r2 FK

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

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

ON UPDATE CASCADE

有关完整的详细信息,您可以阅读本文

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

有关完整的详细信息,您可以阅读本文

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

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

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

在TableA上,您必须:

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

以该顺序。

编辑从这里开始

是语法的链接,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM