【问题标题】:Could not create constraints and Foreign key references invalid table无法创建约束和外键引用无效表
【发布时间】:2019-02-01 15:58:33
【问题描述】:

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

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,第 16 级,状态 1,第 11 行
无法创建约束或索引。查看以前的错误。

我该如何处理这些错误?

【问题讨论】:

  • 尝试先创建“国家”表,然后再创建其他表P
  • 只是为了扩展@ErayBalkanli 的评论,以防您不明白为什么;无法创建外键,因为在创建 P 时外键的目标表不存在。
  • @ErayBalkanli 您应该稍微扩展一下以解释原因并将其发布为答案。
  • 我收到表中已有对象名称“C”的错误
  • 这对您发布的代码毫无意义。你有一个错字。

标签: sql sql-server


【解决方案1】:

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

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

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

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

Create table Country (...) ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2014-02-26
    • 2019-07-01
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多