我在创建一个简单的连接表(关联表等等,无论你的风格如何)时遇到问题。
这些是测试表,因此它们并不多。
第一张表是
CREATE TABLE dbo.CareerField(
CareerFieldID int IDENTITY(1,1) NOT NULL,
CareerFieldName varchar(100) NOT NULL
)
第二张表是
CREATE TABLE dbo.Cluster(
ClusterID int IDENTITY(1,1) NOT NULL,
ClusterName varchar(100) NOT NULL
)
创建多对多关系的第三个表(连接表)是
CREATE TABLE dbo.CareerField_Cluster(
CareerFieldID int NOT NULL,
ClusterID int NOT NULL
)
我正在尝试使用以下
在第三个表中设置外键ALTER TABLE dbo.CareerField_Cluster
ADD CONSTRAINT FK_CareerField_Cluster_CareerFieldID
FOREIGN KEY(CareerFieldID) REFERENCES dbo.CareerField(CareerFieldID)
ALTER TABLE dbo.CareerField_Cluster
ADD CONSTRAINT FK_CareerField_Cluster_ClusterID
FOREIGN KEY(ClusterID) REFERENCES dbo.Cluster(ClusterID)
但是,我一直收到错误
Msg 1776,Level 16,State 0,Line 1 引用表'dbo.CareerField'中没有主键或候选键与外键'FK_CareerField_Cluster_CareerFieldID'中的引用列列表匹配。 Msg 1750,Level 16,State 0,Line 1 无法创建约束。查看以前的错误。
我尝试将两个字段设置为主键,但在创建密钥时不允许我选择单独的表 - 我无法选择CareerFieldID来引用CareerField表,然后选择ClusterID来引用集群表。
我没有MySQL的这个问题,我是SQL Server的新手。非常感谢任何帮助。
答案 0 :(得分:3)
对于每个表CareerField
和Cluster
,请确保通过CONSTRAINT
指令指定了PK。
CREATE TABLE [dbo].[CareerField]
(
[CareerFieldID] [int] IDENTITY(1,1) NOT NULL,
[CareerFieldName] [varchar](100) NOT NULL,
CONSTRAINT [PK_Career] PRIMARY KEY CLUSTERED
(
[CareerFieldID] ASC
)
)