【问题标题】:Why do I get nvarchar value null to a data type in SQL Server 2008?为什么我在 SQL Server 2008 中将 nvarchar 值为 null 的数据类型?
【发布时间】:2015-06-01 20:27:18
【问题描述】:

我在 SQL Server 中遇到错误:

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

在我的员工表中,我有:

ID Int, 
Name nvarchar(50),
Gender nvarchar(10), 
Salary nvarchar(50), 
DepartmentId nvarchar(50)

Null 仅适用于 DepartmentId

在我的部门表中,我有:

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 表连接起来。

【问题讨论】:

  • 部分员工没有部门?
  • “性别 nvarchar(10),” - 真的!它变得更好了! "工资 nvarchar(50),"

标签: sql sql-server sql-server-2008


【解决方案1】:
    1234563类型。如果您没有定义外键引用,您应该这样做。这将有助于确保参照完整性并防止此类错误。
  1. 在字段中存储null 时,您需要确保存储的是实际的null 值,而不是包含“Null”的字符串(这就是您正在执行的操作这个案例)。正是这种转换导致了错误。

【讨论】:

    【解决方案2】:

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

    您的员工表应如下所示:

    CREATE TABLE Employee
    (
        ID Int, 
        Name nvarchar(50),
        Gender nvarchar(10), 
        Salary nvarchar(50), 
        DepartmentId INT
    )
    

    DepartmentId 列需要是 INT,因为它连接到定义为 INT 的 Department 表的 ID 列。

    您的 DepartmentId 列中似乎可能有一些带有单词“null”的字符串值。这些不是空值,而是字符串。您需要先将它们转换为 NULL,使用如下方式:

    update employee set departmentid = null where lower(departmentid) like '%null%'
    

    【讨论】:

    • 哦,我不敢相信我没听懂。所以现在当我尝试将数据类型更改为 Int 时出现错误并且无法保存 int。如何以图形方式或在查询中执行此操作?将 nvarchar 值“Null”转换为数据类型 int 时出现转换失败。声明已终止。
    • 你用的是什么数据库?
    • 我使用 SQL 2008。将 nvarchar 值“Null”转换为数据类型 int 时出现转换失败。该语句已终止。这是使用查询
    • 等等,听起来有些值有字符串'null'
    • 所以只有 DepartmentID 有一个 null 但是当我尝试在 sql 2008 中取消选中它时它不会。
    【解决方案3】:

    我认为您的查询应该是这样的:

    SELECT Name, Gender, Salary, DepartmentName
    FROM Employee
    JOIN Department ON Employee.DepartmentId = CONVER(nvarchar(50), Department.Id)
    

    如果您的目标真的是将 DepartmentName 列与 Employee 表结合起来

    SELECT Name, Gender, Salary, DepartmentName
    FROM Employee
    JOIN Department ON Employee.DepartmentId = Department.DepartmentName
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2011-08-15
      • 1970-01-01
      相关资源
      最近更新 更多