首页 > 解决方案 > 无法创建约束和外键引用无效表

问题描述

我想在我的数据库中创建这两个表:

CREATE TABLE Person 
(
    PID INT NOT NULL,
    CID INT NOT NULL,
    FName VARCHAR(35) NOT NULL,
    LName VARCHAR(35) NOT NULL,
    Gender CHAR(1) NOT NULL,
    DOB DATE NOT NULL
);

ALTER TABLE Person
    ADD CONSTRAINT PK_Person PRIMARY KEY (PID); 
ALTER TABLE Person
    ADD CONSTRAINT FK_Country FOREIGN KEY (CID) REFERENCES Country(CID);
ALTER TABLE Person
    ADD CONSTRAINT CHK_NOTEMPTYNAME CHECK ( Fname <> '' AND  LName <>  '' );
ALTER TABLE Person
    ADD  CONSTRAINT CHK_GENDER CHECK (Gender in ('M', 'F','O'));


CREATE TABLE Country 
(
    CID INT NOT NULL,
    CName VARCHAR(56),
);

ALTER TABLE Country
    ADD CONSTRAINT PK_Country PRIMARY KEY (CID); 
ALTER TABLE Country
    ADD CONSTRAINT CHK_NOTEMPTYCOYNTRY CHECK  (CName <> '');

当我实现这两个表时,我得到两个错误:

消息 1767,级别 16,状态 0,第 11 行
外键“FK_Country”引用无效表“国家/地区”。

消息 1750,级别 16,状态 1,第 11 行
无法创建约束或索引。请参阅以前的错误。

我该如何处理这些错误?

标签: sqlsql-server

解决方案


必须首先创建该表Country,因为它是您的主表,包括将用作其他表的外键的主键。

首先,确保您尚未创建表,如果已创建,请先删除,如果表中没有数据。您可以“刷新”表格部分并检查表格是否存在。或者您可以简单地执行以下操作:

IF OBJECT_ID('tablename', 'U') IS NOT NULL 
  DROP TABLE tablename; 

确保您要创建的表不存在后,创建应该包含稍后将用作另一个表中的外键的键的表,以便首先提供关系。这是COUNTRY为了你的问题。

Create table Country (...) ...

在您确定 Country 表是使用主键约束创建后,您可以创建其他表P并使用其主键作为外键使其与您的 Country 表相关。


推荐阅读