2012-05-17 121 views
0

我有問題創建一個簡單的聯接表(關聯表等無論你的味道)。SQL Server 2008 - 創建一個聯接表

這些都是測試表,所以對他們來說沒有太大的幫助。

第一個表是

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) 

不過,我不斷收到

消息1776,級別16,狀態0,第1行的錯誤 有在引用表「dbo.CareerField」那場比賽沒有主或候選鍵外鍵'FK_CareerField_Cluster_CareerFieldID'中的引用列表。 消息1750,級別16,狀態0,行1 無法創建約束。查看以前的錯誤。

我嘗試設置這兩個字段作爲主鍵,但它不會讓我創建密鑰時選擇一個單獨的表 - 我不能選擇CareerFieldID參考CareerField表,然後羣ID引用集羣表。

我沒有MySQL的這個問題,我是SQL Server的新手。任何幫助深表感謝。

+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 
    ) 
) 
+1

在我把我的頭靠在我的桌子上之後,我會罵我的名字好幾個小時。我不能相信我錯過了這一點。謝謝! :) – dekron