SQL创建外键报错Invalid references及无效列引用问题求解
报错根因
外键约束的生效前提是:你要用作外键的列,必须先在当前创建的从表(REMINDER_AUDIT)中完成字段定义,才能关联主表的对应列。你当前的REMINDER_AUDIT建表语句中没有提前声明REMINDER_RULE_M_D字段,直接在外键约束中引用了这个不存在的列,所以触发报错。
解决方案
- 首先在
REMINDER_AUDIT的字段定义区域新增REMINDER_RULE_M_D字段,字段类型必须和主表REMINDER_RULE_M中被关联的REMINDER_RULE_M_D完全一致(主表该字段为int非空类型,你可以根据业务规则决定从表的该字段是否需要非空约束:如果每条审计记录必须对应一条提醒规则就保留非空,否则可以去掉NOT NULL)。 - 再声明外键约束即可。
修正后的建表SQL示例
CREATE TABLE REMINDER_AUDIT ( REMINDER_AUDIT_D int IDENTITY(1,1) NOT NULL, ACTION varchar(255) NOT NULL, -- 新增外键对应字段,类型和主表对应字段完全匹配 REMINDER_RULE_M_D int NOT NULL, CONSTRAINT FK_b892318b20e5bbe162722ea5946 FOREIGN KEY (REMINDER_RULE_M_D) REFERENCES REMINDER_RULE_M(REMINDER_RULE_M_D), OLD_VALUE nvarchar(1024) NOT NULL, NEW_VALUE nvarchar(1024) NOT NULL )
额外注意事项
外键关联的主表列必须是主键或者带有唯一约束,如果你还没有给REMINDER_RULE_M表的REMINDER_RULE_M_D字段设置主键,需要先执行以下语句补充主键约束:
ALTER TABLE REMINDER_RULE_M ADD CONSTRAINT PK_REMINDER_RULE_M PRIMARY KEY (REMINDER_RULE_M_D);
内容的提问来源于stack exchange,提问作者Divya Singh
相关产品推荐
相关产品推荐

