【问题标题】:Unable to create Foreign Key relationship with another table无法与另一个表创建外键关系
【发布时间】:2018-11-04 19:41:22
【问题描述】:

我正在尝试这样做,

CREATE TABLE [dbo].[tblPerson](
[ID] [int] NOT NULL,
[Personame] [varchar](50) NULL)
[Email] [varchar](50) NULL,
[GenderId] [int] NULL

CREATE TABLE [dbo].[tblGender]( [id] [int] NOT NULL, [Gender] nvarchar NOT NULL)

Alter table tblPerson Add Constraint tblPerson_GenderId_FK Foreign Key (GenderId) references tblGender(id)

我遇到错误,不知道为什么

消息 547,第 16 级,状态 0,第 2 行 ALTER TABLE 语句与 FOREIGN KEY 约束“tblPerson_GenderId_FK”冲突。冲突发生在数据库“Sqlkudavenkat”、表“dbo.tblGender”、列“id”中。

【问题讨论】:

  • 错误很明显,tblPerson 中有一条记录,GenderID 列中的值在tblGender 中不存在。您需要先修复 tblGenderfirst 中的该记录,然后才能创建外键
  • 如果 tblGender 是一个新表,那么您必须首先使用来自 tblPersonGenderID 列中找到的所有值填充它
  • 我将插入数据并添加外键,看看它是如何工作的
  • 我建议您不要使用名称 ID 作为主键。我最大的烦恼之一是在表之间更改列名称。 PersonID 是 PersonID,无论它们在哪个表中。另外,tbl 前缀也不是什么好东西。

标签: sql-server


【解决方案1】:

我怀疑tblGender 是新表,在这种情况下,您需要先用值填充它,然后才能创建外键。

假设您在 tblPerson 中使用了 GenderID 中的 2 个值

0 meaning male
1 meaning female

那么您的查询可能如下所示:

CREATE TABLE [dbo].[tblGender]( [id] [int] NOT NULL, [Gender] nvarchar(100) NOT NULL)

insert into tblGender(id, gender)
select distinct p.GenderID, 
       case when p.GenderID = 0 then 'Male' 
            when p.GenderID = 1 then 'Female'
            else 'it came from outer space' 
       end
from   tblPerson p

Alter table tblPerson Add Constraint tblPerson_GenderId_FK Foreign Key (GenderId) references tblGender(id)

【讨论】:

  • 你是不是假设了外星人的性别?
  • 我将插入数据并添加外键,看看它是如何工作的
  • @JacobH 我没听懂你?
  • @Akula 只是对查询中的 else '它来自外太空'部分开玩笑。
猜你喜欢
  • 2011-08-05
  • 2016-12-02
  • 1970-01-01
  • 2020-04-04
  • 2019-04-10
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多