我创建了一个包含复合主键的表。当我在其他表中引用其中一个复合主键列时,我收到错误,而且我无法创建外键关系。
错误消息:
引用的表中没有主键或候选键 '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
)
请帮助我如何创建具有外键关系的表。
提前致谢!
- 此致 朗高
答案 0 :(得分: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