这是我第一次使用SQL Server,我创建了这些表:
create table Department
(
D_Number int not null,
D_Name varchar(20),
D_MgrSSN int,
D_MgrDate datetime,
primary key(D_Number),
unique(D_Name),
)
create table Empolyee
(
E_SSN int not null,
E_FName varchar(20),
E_LName varchar(20),
E_Sex varchar(6),
E_BDate datetime,
E_Salary decimal(10,2),
E_Address varchar(50),
E_Department varchar(20),
E_SuperSSN int,
primary key(E_SSN),
foreign key(E_Department) references Department(D_Number),
)
当我跑步时,我得到了这个错误:
列'Department.D_Number'与外键'FK_ Empolyee _E_Depa__0CBAE877'中引用列'Empolyee.E_Department'的数据类型不同。
答案 0 :(得分:12)
我个人认为SQL Server在错误消息方面表现非常出色,它告诉您完全需要修复的内容。
查看您定义的两个字段,一个是varchar(20)
,另一个是integer
。
为了使外键与其主键匹配,它必须是相同的类型。
将int
或两者都更改为varchar
。无论什么对您的商业模式都有意义。
答案 1 :(得分:5)
您:
E_Department is varchar and D_Number is integer //thats the problem so make E_Department integer //same data type
答案 2 :(得分:1)
D_Number是一个int,而E_Department是varchar(50),它们需要相同才能使外键声明起作用。
答案 3 :(得分:1)
这是因为E_Department
是varchar(20)
,但它引用的列D_Number
是int
。您需要将它们设置为相同类型(int
,因为您将其称为“数字”)。
答案 4 :(得分:0)
一些提示: - 员工拼写错误 - 您不应该使用SSN作为主键,因为您无法轻松将其编入索引 - D_Number未设置为department表的标识,也未设置为唯一。
问题: - 类型E_Department是varchar(20),D_Number是int,所以当然它不起作用