无法创建约束并且外键引用无效表

时间:2019-02-01 15:58:33

标签: sql sql-server

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

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”引用无效的表“ Country”。

     

1750级第1州第11行的消息1
  无法创建约束或索引。查看以前的错误。

如何处理这些错误?

1 个答案:

答案 0 :(得分:0)

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

首先,请确保尚未创建表,如果没有,请首先删除,如果表未包含任何数据。您可以“刷新”表部分并检查表是否在那里。或者您可以简单地做到:

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

在确保要创建的表不存在之后,创建该表,该表应包含将在以后另一个表中用作外键的键,以提供第一关系。您的问题是COUNTRY

Create table Country (...) ...

在确定使用主键约束创建了Country表之后,您可以创建其他表P并通过将其主键用作外键使其与Country表相关。