如何解决如何在数据库中具有相同名称的两个不同表中创建两个单独的外键列
我写了这段代码:
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
但是我遇到了这个错误
除了更改 Country_ID
列的名称之外,我该如何解决此错误?
解决方法
我假设您想在以下之间建立外键约束:
-
dbo.Users.Country_Id
和dbo.Countries.Id
-
dbo.Users.Language_Id
和dbo.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
的约束 - 而您只是不能有两个具有相同名称的数据库对象 -这里没有解决方法....
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。