Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法创建与其他表的外键关系_Sql Server - Fatal编程技术网

Sql server 无法创建与其他表的外键关系

Sql server 无法创建与其他表的外键关系,sql-server,Sql Server,我正试着这么做 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 Ad

我正试着这么做

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)
我不知道为什么会出错

Msg 547,16级,状态0,第2行 ALTER TABLE语句与外键约束tblPerson\u GenderId\u FK冲突。数据库Sqlkudavenkat表dbo.tblGender列“id”中发生冲突

我怀疑tblGenderis是一个新表,在这种情况下,您需要在创建外键之前用值填充它

假设在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)

错误很明显,tblPerson中有一条记录的GenderID列中的值在tblGender中不存在。如果TBLGender是一个新表,则必须首先在TBLGender中修复该记录,然后才能创建外键。如果TBLGender是一个新表,则必须首先使用列GenderID中的所有值填充该记录。tblPersoni将插入数据并添加外键,并查看其工作方式。我建议您不要将名称ID用作主键。我最恼火的事情之一是列在表之间更改名称。无论他们在哪张桌子上,人形都是人形。另外,tbl前缀也不是一件好事。你只是假设外星人的性别吗?我将插入数据并添加外键,然后看看它是如何实现的works@JacobH我不明白你的意思?@Akula只是开了个玩笑,问的另一个问题是“它来自外太空”。