2012-03-08 115 views
8

我想創建一個複合外鍵關係/約束。所有表都是空的。我有這個表:創建複合外鍵約束

CREATE TABLE [dbo].[ChemSampleValueTest](
    [SampleNumber] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [Value] [numeric](18, 6) NOT NULL, 
    [Accuracy] [varchar](50) NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK_SampleValueTest] PRIMARY KEY CLUSTERED 
    (
     [SampleNumber] ASC, 
     [ParameterID] ASC, 
     [ResultGroupID] ASC 
    ) 
) ON [PRIMARY] 

與此表:

CREATE TABLE [dbo].[ChemSampleValueEventLinkTest](
    [Event] [int] NOT NULL, 
    [SampleNumber] [int] NOT NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NULL 
) ON [PRIMARY] 

,我想他們這樣的鏈接:據

alter table [ChemSampleValueEventLinkTest] add 
    constraint FK_ChemSampleValueEvent_ChemSampleValue_test 
    foreign key ([SampleNumber], [ResultGroupID], [ParameterID]) 
    references ChemSampleValueTest ([SampleNumber], [ResultGroupID], [ParameterID]) 

我可以告訴所有的列類型是一樣的,但它一直說

在引用的表 'ChemSampleValueTest'中沒有與外鍵 'FK_ChemSampleValueEvent_ChemSampleValue_test'中的引用列表匹配的主鍵或候選鍵。

我哪裏錯了?

+0

有星羅棋佈各地(主要是關於違反約束)的幾個類似的問題,但我無法找到任何幫助了我。 – sennett 2012-03-08 03:10:41

回答

15

看起來你需要讓你的FK /引用列表按照它們在PK定義中出現的順序排列。

這應該工作:

CREATE TABLE [dbo].[ChemSampleValueTest](
    [SampleNumber] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [Value] [numeric](18, 6) NOT NULL, 
    [Accuracy] [varchar](50) NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK_SampleValueTest] PRIMARY KEY CLUSTERED 
    (
     [SampleNumber] ASC, 
     [ParameterID] ASC, 
     [ResultGroupID] ASC 
    ) 
) ON [PRIMARY] 

CREATE TABLE [dbo].[ChemSampleValueEventLinkTest](
    [Event] [int] NOT NULL, 
    [SampleNumber] [int] NOT NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NULL 
) ON [PRIMARY] 

alter table [ChemSampleValueEventLinkTest] add 
    constraint FK_ChemSampleValueEvent_ChemSampleValue_test 
    foreign key ([SampleNumber], [ParameterID], [ResultGroupID]) 
    references ChemSampleValueTest ([SampleNumber], [ParameterID], [ResultGroupID]) 
+0

你是對的。考慮它,這是有道理的。複合外鍵。思維彎曲,但開始有意義。感謝您的幫助伴侶。 – sennett 2012-03-08 03:31:22