在SQL Server 2008中,为什么要将nvarchar值null设置为数据类型?

在SQL Server 2008中,为什么要将nvarchar值null设置为数据类型?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在SQL Server中遇到错误: 将nvarchar值“Null”转换为数据类型int时,转换失败 在我的employee表中,我有: ID Int, Name nvarchar(50), Gender nvarchar(10), Salary nvarchar(50), DepartmentId nvarchar(50) 只有部门ID才允许为空 在我的部门表中,我有: Id int, Department Name nvarchar(50), Location nvarchar(

我在SQL Server中遇到错误:

将nvarchar值“Null”转换为数据类型int时,转换失败

在我的employee表中,我有:

ID Int, 
Name nvarchar(50),
Gender nvarchar(10), 
Salary nvarchar(50), 
DepartmentId nvarchar(50)
只有
部门ID
才允许为空

在我的部门表中,我有:

Id int, 
Department Name nvarchar(50),
Location nvarchar(50), 
DepartmentHeead nvarchar(50)
它们都不允许空值

我正在尝试连接表,以便:

Select Name, Gender, Salary, DepartmentName
From Employee
JOIN Department ON Employee.DepartmentId = Department.Id
这就是我得到错误的时候:

将nvarchar值“Null”转换为数据类型int时,转换失败


我不理解这里的错误。我的目标是将
DepartmentName
列与
Employee
表联接。

Employee表中的DepartmentId列应该定义为INT。因为它是Department表中ID列的外键,ID列被定义为INT

您的employee表应该如下所示:

CREATE TABLE Employee
(
    ID Int, 
    Name nvarchar(50),
    Gender nvarchar(10), 
    Salary nvarchar(50), 
    DepartmentId INT
)
update employee set departmentid = null where lower(departmentid) like '%null%'
SELECT Name, Gender, Salary, DepartmentName
FROM Employee
JOIN Department ON Employee.DepartmentId = CONVER(nvarchar(50), Department.Id)
DepartmentId列需要是一个INT,因为它连接到Department表的ID列,Department表被定义为INT

在DepartmentId列中,似乎有一些字符串值带有“null”一词。这些不是空值,而是字符串。您需要首先使用以下方法将它们转换为null:

CREATE TABLE Employee
(
    ID Int, 
    Name nvarchar(50),
    Gender nvarchar(10), 
    Salary nvarchar(50), 
    DepartmentId INT
)
update employee set departmentid = null where lower(departmentid) like '%null%'
SELECT Name, Gender, Salary, DepartmentName
FROM Employee
JOIN Department ON Employee.DepartmentId = CONVER(nvarchar(50), Department.Id)
  • 如果要存储对另一个表的外键引用(在本例中,员工表上的
    DepartmentId
    到部门表上的
    Id
    字段),则它们需要具有相同的数据类型。如果没有定义外键引用,则应该。它将有助于确保引用完整性,并防止类似这样的错误

  • 在字段中存储
    null
    时,您需要确保存储的是实际的
    null
    值,而不是包含“null”的字符串(在本例中,这看起来像是您正在执行的操作)。正是这种转换导致了错误


  • 我认为你的问题应该是这样的:

    CREATE TABLE Employee
    (
        ID Int, 
        Name nvarchar(50),
        Gender nvarchar(10), 
        Salary nvarchar(50), 
        DepartmentId INT
    )
    
    update employee set departmentid = null where lower(departmentid) like '%null%'
    
    SELECT Name, Gender, Salary, DepartmentName
    FROM Employee
    JOIN Department ON Employee.DepartmentId = CONVER(nvarchar(50), Department.Id)
    
    如果您的目标是将DepartmentName列与Employee表连接起来:


    有些员工没有部门?“性别女皇(10),”-真的!越来越好了!“工资nvarchar(50),“哦,我真不敢相信我没听懂。因此,当我尝试将数据类型更改为Int时,会出现错误,无法保存Int。如何以图形方式或在查询中进行保存?将nvarchar值“Null”转换为数据类型int时,我获取转换失败。该语句已终止。您使用的是什么数据库?我使用SQL 2008。将nvarchar值“Null”转换为数据类型int时,我获取转换失败。该语句已终止。这是使用querywait,听起来有些值有字符串“null”,所以只有DepartmentID有null,但当我在sql 2008中尝试取消选中它时,它不允许。