Создание составного ограничения внешнего ключа - PullRequest
9 голосов
/ 08 марта 2012

Я пытаюсь создать составное отношение / ограничение внешнего ключа.Все таблицы пусты.У меня есть эта таблица:

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.

Куда я иду?

1 Ответ

15 голосов
/ 08 марта 2012

Похоже, вам нужен список 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...