代码之家  ›  专栏  ›  技术社区  ›  Travis Heeter

如何将列移到另一个表中,替换FK?

  •  2
  • Travis Heeter  · 技术社区  · 6 年前

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

    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       | ...
    

    我想移动或复制 internalID TABLE A TABLE B &安培; TABLE C -基于FK关系,然后从 .

    生成的表应如下所示:

    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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Yogesh Sharma    6 年前

    你可以简单使用 update 声明:

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

    之后你可以放下你的专栏 internalId 从表 a

    alter table a
        drop column internalId;
    
        2
  •  1
  •   Cetin Basoz    6 年前
    Update TableB
    set internalId = a.InternalId
    from TableA a
    where tableB.FK_toTableA = a.Id;
    
    Update TableC
    set internalId = a.InternalId
    from TableA a
    where tableC.FK_toTableA = a.Id;
    
    alter table tableA drop column internalId;