如何在数据库中具有相同名称的两个不同表中创建两个单独的外键列

问题描述

我写了这段代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[USERS]
(
    [ID] [int] NOT NULL,[First_Name] [varchar](50) NOT NULL,[Last_Name] [varchar](50) NOT NULL,[email] [varchar](50) NOT NULL,[Password] [text] NOT NULL,[User_Type] [tinyint] NOT NULL,[Date_of_Birth] [date] NOT NULL,[Gender] [varchar](50) NULL,[Login_with] [tinyint] NOT NULL,[Phone] [int] NOT NULL,[Receive_Coupon] [int] NULL,[Country_ID] [int] NOT NULL,[Created] [datetime] NOT NULL,[Modified] [datetime] NOT NULL,[Status] [tinyint] NOT NULL,[Language_ID] [int] NOT NULL,CONSTRAINT Country_ID FOREIGN KEY (ID) REFERENCES COUNTRIES,CONSTRAINT Language_ID FOREIGN KEY (ID) REFERENCES LANGUAGE,CONSTRAINT [PK_USERS] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
                    WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXtimage_ON [PRIMARY]
GO

但是我遇到了这个错误

Error

除了更改 Country_ID 列的名称之外,我该如何解决错误

enter image description here

解决方法

假设您想在以下之间建立外键约束:

  • dbo.Users.Country_Iddbo.Countries.Id
  • dbo.Users.Language_Iddbo.Language.Id

但您现在不这样做 - 而是使用以下语法:

CREATE TABLE [dbo].[USERS]
(
    -- all your columns here
    CONSTRAINT FK_Users_Countries 
        FOREIGN KEY (Country_ID) REFERENCES dbo.Countries(ID),CONSTRAINT FK_Users_Language
        FOREIGN KEY (Language_ID) REFERENCES dbo.Language(Id),CONSTRAINT [PK_USERS] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
)

你需要

  • 为您的 FK 约束命名(例如 FK_Users_Countries
  • 然后定义当前表中的哪一列 (dbo.Users) 是外键列(例如 Country_Id - 在 FOREIGN KEY (column) 部分)
  • 然后定义它引用的内容 - 通常是表和该表中的列(在 REFERENCES 关键字之后)

您当前的代码:

CONSTRAINT Country_ID FOREIGN KEY (ID) REFERENCES COUNTRIES,

正在定义一个名为 Country_ID 的外键约束,它将 dbo.Users.ID 列与 Countries 表的主键匹配。最有可能的是,您已经有另一个表具有相同的错误代码行,因此已经定义了一个名为 Country_ID 的约束 - 而您只是不能有两个具有相同名称的数据库对象 -这里没有解决方法....