我正在尝试在SQL中使用INNER JOIN
来显示从一个表到另一个表的列。这是我正在使用的查询:
SELECT *
FROM Person.BusinessEntity
INNER JOIN HumanResources.Employee ON Person.BusinessEntity.BusinessEntityID = HumanResources.Employee.JobTitle
当我执行此操作时,出现错误:
将nvarchar值'首席执行官'转换为数据类型int
时转换失败
我不是要尝试转换数据,所以我不确定为什么我会收到此错误。
非常感谢任何帮助!
答案 0 :(得分:2)
当您尝试连接到具有不同数据类型的列时,您强制数据库进行隐式转换,在这种情况下它无法执行。你想要做的是加入共享密钥上的表(在这种情况下是BusinessEntityID)。
表和列名称看起来很熟悉,我猜你正在按照开始Microsoft SQL Server 2012编程(或一些使用AdventureWorks示例数据库的类似书籍)中的示例进行操作如果是这样,问题的根源是您在HumanResources.Employee表中使用了错误的列。它应该是
SELECT Person.BusinessEntity.*, HumanResources.Employee.JobTitle
FROM Person.BusinessEntity
INNER JOIN HumanResources.Employee
ON Person.BusinessEntity.BusinessEntityID = HumanResources.Employee.BusinessEntityID
答案 1 :(得分:0)
我认为列BusinessEntityID的类型是INT,而列JobTitle的类型是NVARCHAR。所以这个:
ON Person.BusinessEntity.BusinessEntityID = HumanResources.Employee.JobTitle
等于:
ON 1 = 'Chief...Officer'
你无法将int与NVARCHAR进行比较,两者必须是同一类型。
答案 2 :(得分:0)
如果HumanResources.Employee.JobTitle
混合了数据,数字和字符
我将使用
WHERE HumanResources.Employee.JobTitle!= CHAR
例如。