2012-03-08 37 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]) 

を同じですが、それは言い続ける

外部キー 'FK_ChemSampleValueEvent_ChemSampleValue_test'内の参照列リストと一致する、参照されたテーブル 'ChemSampleValueTest'にプライマリキーまたは候補キーがありません。

どこが間違っていますか?

+0

あり(主に制約違反について)周りに点在するいくつかの同様の質問がありますが、私は私を助けた何かを見つけることができませんでした。 – sennett

答えて

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