SQL Query不起作用

时间:2011-12-06 19:02:08

标签: sql sql-server-2008

这是我第一次使用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'的数据类型不同。

5 个答案:

答案 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_Departmentvarchar(20),但它引用的列D_Numberint。您需要将它们设置为相同类型(int,因为您将其称为“数字”)。

答案 4 :(得分:0)

一些提示: - 员工拼写错误 - 您不应该使用SSN作为主键,因为您无法轻松将其编入索引 - D_Number未设置为department表的标识,也未设置为唯一。

问题: - 类型E_Department是varchar(20),D_Number是int,所以当然它不起作用