2012-03-08 119 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