【问题标题】:SQL Add foreign key to existing columnSQL将外键添加到现有列
【发布时间】:2012-05-10 11:52:21
【问题描述】:

如果我在 SQL Server 2008 中使用以下 SQL 命令来更新具有外键约束的表:

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id)

UserID 是我在 Employees 表中的 FK 列。我试图在我的ActiveDirectories 表中引用 UserID。我收到此错误:

外键 'UserID' 在引用中引用了无效列 'UserID' 表“员工”。

【问题讨论】:

标签: sql-server-2008 foreign-key-relationship


【解决方案1】:

如果表已经创建:

先做:

ALTER TABLE `table1_name` ADD UNIQUE( `column_name`);

然后:

ALTER TABLE `table1_name` ADD FOREIGN KEY (`column_name`) REFERENCES `table2_name`(`column_name`);

【讨论】:

    【解决方案2】:

    未来。

    ALTER TABLE Employees
    ADD UserID int;
    
    ALTER TABLE Employees
    ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
        REFERENCES ActiveDirectories(id);
    

    【讨论】:

      【解决方案3】:
      ALTER TABLE Faculty 
      WITH CHECK ADD  CONSTRAINT FKFacultyBook
      FOREIGN KEY FacId
      REFERENCES Book Book_Id
      
      ALTER TABLE Faculty 
      WITH CHECK ADD  CONSTRAINT FKFacultyStudent 
      FOREIGN KEY FacId
      REFERENCES Student StuId
      

      【讨论】:

      • 您应该在回答中提供一些解释
      【解决方案4】:

      ActiveDirectories(id) 的外键创建方式正确,我认为主要错误是您没有在 ActiveDirectories 表中提到 id 的主键

      【讨论】:

        【解决方案5】:

        MySQL / SQL Server / Oracle / MS Access:

        ALTER TABLE Orders
        ADD FOREIGN KEY (P_Id)
        REFERENCES Persons(P_Id)
        

        要允许命名 FOREIGN KEY 约束并在多列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:

        MySQL / SQL Server / Oracle / MS Access:

        ALTER TABLE Orders
        ADD CONSTRAINT fk_PerOrders
        FOREIGN KEY (P_Id)
        REFERENCES Persons(P_Id)
        

        【讨论】:

          【解决方案6】:

          也许你的列倒了??

          ALTER TABLE Employees
          ADD FOREIGN KEY (UserID)           <-- this needs to be a column of the Employees table
          REFERENCES ActiveDirectories(id)   <-- this needs to be a column of the ActiveDirectories table
          

          会不会是Employees表中的列名为IDActiveDirectories表中的UserID

          那么你的命令应该是:

          ALTER TABLE Employees
          ADD FOREIGN KEY (ID)                   <-- column in table "Employees"
          REFERENCES ActiveDirectories(UserID)   <-- column in table "ActiveDirectories" 
          

          【讨论】:

          • 我知道这很奇怪,但不幸的是 ActiveDirectory 表 id 中的名称
          【解决方案7】:

          错误表明您的员工表中没有 UserID 列。尝试先添加列,然后重新运行语句。

          ALTER TABLE Employees
          ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
              REFERENCES ActiveDirectories(id);
          

          【讨论】:

          • 这是正确的。我们的数据库没有更新我们的添加列。这已经解决了,但我们的列没有建立我仍然无法添加约束。 There are no primary or candidate keys in the referenced table 'ActiveDirectories' that match the referencing column list in the foreign key 'FK__Employees__UserI__04E4BC85'.
          • 看起来 FK__Employees__UserI__04E4BC85 引用的任何列都没有定义为 ActiveDirectories 表中的 PRIMARY KEY 或候选键。
          • 是的,但这绝对是我们在 ActiveDirectories 表中的 PK
          • 已解决:在构建之前创建 ERD 并建立关系是有原因的。我们在一个表中有太多记录,导致尝试创建与另一个表的关系时出错。谢谢大家。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-19
          • 2014-02-20
          • 2013-07-13
          • 2011-10-07
          • 2014-01-15
          • 1970-01-01
          相关资源
          最近更新 更多