SQL Server 2008 - 创建连接表

时间:2012-05-17 21:08:25

标签: sql-server join create-table

我在创建一个简单的连接表(关联表等等,无论你的风格如何)时遇到问题。

这些是测试表,因此它们并不多。

第一张表是

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的新手。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

对于每个表CareerFieldCluster,请确保通过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
    )
)