简体   繁体   English

SQL Server表创建期间的外键约束错误

[英]Foreign key constraint error during SQL Server table creation

I am trying to create a table on SQL Server which has foreign key constraints.I checked all my parent tables and their primary keys match with my new foreign key constraints. 我正在尝试在具有外键约束的SQL Server上创建一个表。我检查了所有父表及其主键是否与新的外键约束匹配。 Can someone help me out in resolving this issue. 有人可以帮我解决这个问题。 My DDL and error message are as below. 我的DDL和错误消息如下。

DDL DDL

CREATE TABLE I_IPV_LOB_PROG_PROV_MO_METRIC_TRNS(
    AARP_ORG_ID           int               NOT NULL,
    LOB_ID                int               NOT NULL,
    PGM_CAT_ID            int               NOT NULL,
    PGM_ID                int               NOT NULL,
    PROV_ID               int               NOT NULL,
    CAT_OF_MEAS_ID        int               NOT NULL,
    SUBCAT_OF_MEAS_ID     int               NOT NULL,
    MEAS_ID               int               NOT NULL,
    TYPE_OF_METRIC_ID     int               NOT NULL,
    METRIC_VAL_ROLE_ID    int               NOT NULL,
    MO_ID                 int               NOT NULL,
    OPER_TXT              varchar(5)        NULL,
    METRIC_VAL            decimal(19, 2)    NOT NULL,
    LST_UPD_DT            datetime          NOT NULL,
    LOAD_DT               datetime          NULL,
    LST_UPD_USERID        char(20)          NOT NULL,
    CONSTRAINT PK79 PRIMARY KEY NONCLUSTERED (TYPE_OF_METRIC_ID, METRIC_VAL_ROLE_ID, AARP_ORG_ID, LOB_ID, PGM_CAT_ID, PGM_ID, PROV_ID, MEAS_ID, MO_ID, CAT_OF_MEAS_ID, SUBCAT_OF_MEAS_ID), 
    CONSTRAINT RefI_IPV_TYPE_OF_METRIC_TRNS73 FOREIGN KEY (TYPE_OF_METRIC_ID)
    REFERENCES I_IPV_TYPE_OF_METRIC_TRNS(TYPE_OF_METRIC_ID),
    CONSTRAINT RefI_IPV_METRIC_VAL_ROLE_TRNS75 FOREIGN KEY (METRIC_VAL_ROLE_ID)
    REFERENCES I_IPV_METRIC_VAL_ROLE_TRNS(METRIC_VAL_ROLE_ID),
    CONSTRAINT RefI_IPV_LOB_PROG_PROV_MEAS_TRNS345 FOREIGN KEY (AARP_ORG_ID,LOB_ID,PGM_CAT_ID,PGM_ID,PROV_ID,MEAS_ID,CAT_OF_MEAS_ID,SUBCAT_OF_MEAS_ID)
    REFERENCES I_IPV_LOB_PROG_PROV_MEAS_TRNS(AARP_ORG_ID,LOB_ID,PGM_CAT_ID,PGM_ID,PROV_ID,MEAS_ID,CAT_OF_MEAS_ID,SUB_CAT_OF_MEAS_ID)
)
go

Parent Table DDL 父表DDL

CREATE TABLE I_IPV_LOB_PROG_PROV_MEAS_TRNS(
    AARP_ORG_ID          int         NOT NULL,
    LOB_ID               int         NOT NULL,
    PGM_CAT_ID           int         NOT NULL,
    PGM_ID               int         NOT NULL,
    PROV_ID              int         NOT NULL,
    CAT_OF_MEAS_ID       int         NOT NULL,
    SUBCAT_OF_MEAS_ID    int         NOT NULL,
    MEAS_ID              int         NOT NULL,
    LOAD_DT              datetime    NULL,
    LST_UPD_USERID       char(20)    NOT NULL,
    LST_UPD_DT           datetime    NOT NULL,
    CONSTRAINT PK115 PRIMARY KEY NONCLUSTERED (MEAS_ID, PROV_ID, AARP_ORG_ID, LOB_ID, PGM_ID, PGM_CAT_ID, CAT_OF_MEAS_ID, SUBCAT_OF_MEAS_ID), 
    CONSTRAINT RefI_IPV_LOB_PROG_CAT_PROV_TRNS322 FOREIGN KEY (PROV_ID, AARP_ORG_ID, LOB_ID, PGM_ID, PGM_CAT_ID)
    REFERENCES I_IPV_LOB_PROG_CAT_PROV_TRNS(PROV_ID, AARP_ORG_ID, LOB_ID, PGM_ID, PGM_CAT_ID),
    CONSTRAINT RefI_IPV_MEAS_CAT_TRNS342 FOREIGN KEY (MEAS_ID, CAT_OF_MEAS_ID, SUBCAT_OF_MEAS_ID)
    REFERENCES I_IPV_MEAS_CAT_TRNS(MEAS_ID, CAT_OF_MEAS_ID, SUBCAT_OF_MEAS_ID)
)
go

Error Msg 错误讯息

Msg 1776, Level 16, State 0, Line 1 消息1776,级别16,状态0,第1行
There are no primary or candidate keys in the referenced table 'I_IPV_LOB_PROG_PROV_MEAS_TRNS' that match the referencing column list in the foreign key 'RefI_IPV_LOB_PROG_PROV_MEAS_TRNS345'. 在引用表“ I_IPV_LOB_PROG_PROV_MEAS_TRNS”中没有与主键“ RefI_IPV_LOB_PROG_PROV_MEAS_TRNS345”中的引用列列表匹配的主键或候选键。
Msg 1750, Level 16, State 0, Line 1 消息1750,级别16,状态0,第1行
Could not create constraint. 无法创建约束。 See previous errors. 请参阅先前的错误。

One of the fields in the target table must be its primary key (best) or be very quickly findable via some index using the at least one of nthe fields you've listed. 目标表中的字段之一必须是它的主键(最好),或者使用您列出的nthe字段中的至少一个,可以通过某个索引很快找到。 If there are no keys in your list it will have to read the whole table to find the specific row and this is not a good thing to do, so it won't. 如果列表中没有键,则必须阅读整个表才能找到特定的行,这不是一件好事,所以不会。 Create a unique index on the target table containing some/all of the fields you're constraining and it should be OK. 在目标表上创建一个唯一索引,其中包含您要约束的某些/所有字段,应该可以。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM