【问题标题】:Foreign Key error in table creation表创建中的外键错误
【发布时间】:2012-03-14 16:28:14
【问题描述】:

我创建了一个包含复合主键的表。当我在其他表中引用其中一个复合主键列时,出现错误并且无法创建外键关系。

错误信息:

引用的表中没有主键或候选键 '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
)

请帮助我如何创建具有外键关系的表。

提前致谢!

--问候, 兰加

【问题讨论】:

    标签: sql-server-2005


    【解决方案1】:

    如果主表定义了复合主键

     PRIMARY KEY(APPLICATION_CD,TBL_NM)
    

    那么所有想要引用该表的表都必须使用整个复合键作为它们的外键引用。您不能仅引用主键的一部分 - 它是整个键或什么都没有。

    您的子表中需要两列

    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
    

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 2013-11-21
      • 2013-12-08
      • 2012-07-01
      相关资源
      最近更新 更多