SQL查询没有';行不通
这是我第一次使用SQL Server,我创建了以下表:SQL查询没有';行不通,sql,sql-server-2008,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
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”的数据类型不同
就我个人而言,我认为SQL Server在错误消息方面做得非常好,它准确地告诉您需要修复的内容 查看您定义的两个字段,一个是
varchar(20)
另一个是整数
为了使外键与其主键匹配,外键必须是同一类型。
要么将两者都更改为int
,要么将两者都更改为varchar
。任何对您的商业模式有意义的东西。您的:
E_Department is varchar
and
D_Number is integer
//thats the problem
so make E_Department integer //same data type
急诊科是瓦查尔
和
D_数是整数
//这就是问题所在
因此,将E_部门设置为整数//相同的数据类型
D_编号是一个int,E_部门是varchar(50)。它们必须相同,外键声明才能工作。这是因为E_部门
是varchar(20)
,但它引用的列D_编号
,是int
。您需要使这两种类型相同(int
,因为您称之为“Number”)。一些提示:
-雇员拼写错误
-永远不要将SSN用作主键,因为您无法轻松索引它。
-D_编号未设置为部门表的标识,也未设置为唯一
问题是:
-类型E_Department是一个varchar(20),D_Number是一个int,因此它当然不起作用您正在运行的实际查询是什么?我使用SQL SERVER 2008,这就是您需要的吗?错误说明了一切,您的密钥E_Department
与D_Number
的类型不同。你可以把E_Department
改成typeint
。它不允许您创建Employee表,也不显示任何研究工作。您只是尝试运行查询并粘贴错误,而没有费心去理解它的含义。