首页 > 解决方案 > 如何将列移动到另一个表,替换 FK?

问题描述

我有 3 张表,一张是另外两张的父表。我想分离一列,将其移动到基于 FK 的子表中。这需要在 SQL 中完成(没有工作室快捷方式)。

我有两张这样的桌子:

TABLE A:
internalID  |  id  | otherdata
============+======+===========
  myid      |   1  | ...
------------+------+-----------
  my2ndid   |   2  | ...
------------+------+-----------
  1234      |   3  | ...
------------+------+-----------
  5678      |   4  | ...

TABLE B:
internalID  |  FK_toTableA  | otherdata
============+===============+===========
  NULL      |       1       | ...
------------+---------------+-----------
  NULL      |       2       | ...

TABLE C:
internalID  |  FK_toTableA  | otherdata
============+===============+===========
  NULL      |       3       | ...
------------+---------------+-----------
  NULL      |       4       | ...

我想根据 FK 关系internalID从& - 移动或复制,然后从TABLE A中删除 internalID 列。TABLE BTABLE CTABLE A

结果表应如下所示:

TABLE A:
  id  | otherdata
======+===========
   1  | ...
------+-----------
   2  | ...
------+-----------
   3  | ...
------+-----------
   4  | ...

TABLE B:
internalID  |  FK_toTableA  | otherdata
============+===============+===========
  myid      |       1       | ...
------------+---------------+-----------
  my2ndid   |       2       | ...

TABLE C:
internalID  |  FK_toTableA  | otherdata
============+===============+===========
  1234      |       3       | ...
------------+---------------+-----------
  5678      |       4       | ...

SQL 版本:13.0.4001.0

标签: sql-server

解决方案


您可以简单地使用update语句:

update b
    set b.internalID  = a.internalID 
from b inner join
     a
     on a.id = b.FK_toTableA; 

之后,您可以internalId从 table中删除列a

alter table a
    drop column internalId;

推荐阅读