Ошибка внешнего ключа при создании таблицы - PullRequest
0 голосов
/ 14 марта 2012

Я создал таблицу с составным первичным ключом. Когда я ссылаюсь на один из столбцов составного первичного ключа в другой таблице, я получаю сообщение об ошибке и не могу создать отношение внешнего ключа.

Сообщение об ошибке:

В ссылочной таблице нет первичных ключей или ключей-кандидатов. 't_app_arcv_tbl', который соответствует списку ссылающихся столбцов во внешнем ключ 'fk_APPLICATION_CD'.

Таблица с составным первичным ключом

Create table t_app_arcv_tbl
(
    APPLICATION_CD varchar(10),     
    TBL_NM varchar(50) not null ,
    ARCV_TBL_TYP_CD char(2) not NULL constraint fk_Arcv_TBL_TYP_CD foreign key references t_app_arcv_tbl_typ(ARCV_TBL_TYP_CD) , 
    ACT_ID Char(1) not NULL,
    OPER_ID varchar(50) not NULL,       
    PSTDT datetime not NULL         
    Constraint PK_AppName_TblNM PRIMARY KEY(APPLICATION_CD,TBL_NM)
)

Следующая таблица, которую я пытаюсь создать с ограничением внешнего ключа

*

-- Create Table Script for archival process Tracking
create table t_app_arcv_log         
(
    APPLICATION_CD varchar(10) not NULL constraint fk_APPLICATION_CD foreign key references t_app_arcv_tbl(APPLICATION_CD),         
    TBL_NM varchar(50) constraint fk_TBL_NM foreign key references t_app_arcv_tbl(TBL_NM),
    XTRCT_DT datetime,
    ARCV_TYP_CD char(2) not NULL constraint fk_Arcv_TYP_CD foreign key references t_app_arcv_typ(ARCV_TYP_CD),          
    STRT_DT datetime,
    END_DT datetime,
    ROW_CNT_BFR int,
    ROW_CNT_AFT int,
    ARCV_STTS_CD char(1) not null,
    OPER_ID varchar(50) not NULL,       
    PSTDT datetime not NULL
)

Пожалуйста, помогите мне, как создать таблицу с отношением внешнего ключа.

Заранее спасибо!

- С уважением, Ранга

1 Ответ

1 голос
/ 14 марта 2012

Если основная таблица определяет составной первичный ключ

 PRIMARY KEY(APPLICATION_CD,TBL_NM)

, то все таблицы, которые хотят ссылаться на эту таблицу, должны использовать весь составной ключ в качестве своей ссылки FK.Вы не можете ссылаться только на части первичного ключа - это весь ключ или ничего.

Вам необходимо оба столбца в вашей дочерней таблице:

CREATE TABLE dbo.t_app_arcv_tbl
(
    APPLICATION_CD varchar(10),     
    TBL_NM varchar(50) not null ,
    ARCV_TBL_TYP_CD char(2) not NULL,
    TBL_NM varchar(50) not null ,  -- <== ADD THIS
    ACT_ID Char(1) not NULL,
    OPER_ID varchar(50) not NULL,       
    PSTDT datetime not NULL         
    Constraint PK_AppName_TblNM PRIMARY KEY(APPLICATION_CD,TBL_NM)
)

-- add foreign key constraint - it **MUST** define and use **BOTH** columns 
-- from the PK of the referenced table!
ALTER TABLE dbo.t_app_arcv_tbl
ADD CONSTRAINT fk_Arcv_TBL_TYP_CD 
FOREIGN KEY (ARCV_TBL_TYP_CD, TBL_NM)
REFERENCES dbo.t_app_arcv_tbl_typ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...