2012-03-14 67 views
0

我已經創建了一個包含複合主鍵的表。當我在其他表中引用其中一個複合主鍵列時,出現錯誤,我無法創建外鍵關係。表創建中的外鍵錯誤

錯誤消息:

有被引用表 「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 
) 

請幫助我如何創建與外鍵關係的表。

在此先感謝!

--Regards, 朗高

回答

1

如果主表定義了一個複合主鍵

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