2012-03-08 20 views
8

Tôi đang cố tạo mối quan hệ/ràng buộc khóa ngoại phức hợp. Tất cả các bảng đều trống. Tôi có bảng này:Tạo ràng buộc khóa ngoài phức hợp

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] 

và bảng này:

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] 

và tôi muốn liên kết chúng như thế này:

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

Theo như tôi có thể nói tất cả các loại cột giống nhau, nhưng nó vẫn tiếp tục nói rằng

Không có khóa chính hoặc khóa ứng viên nào trong bảng được tham chiếu 'ChemSampleValueTest' khớp với danh sách cột tham chiếu trong khóa ngoài 'FK_ChemSampleValueEvent_ChemSampleValue_test'.

Tôi sẽ làm gì sai?

+0

Có một vài câu hỏi tương tự rải rác xung quanh (chủ yếu là về vi phạm chế), nhưng tôi không thể tìm thấy bất cứ điều gì đã giúp tôi. – sennett

Trả lời

15

Dường như bạn cần có danh sách tham chiếu FK/tham chiếu theo đúng thứ tự chúng xuất hiện trong định nghĩa PK.

này nên làm việc:

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

Bạn chính xác. Suy nghĩ về nó, điều đó có ý nghĩa. Phím tổng hợp nước ngoài. Tâm uốn, nhưng bắt đầu có ý nghĩa. Cảm ơn bạn đã giúp đỡ của bạn. – sennett