我正在尝试查找不属于已批准公司信息XML的所有业务ID。
我的商家ID在我的商家信息表中以varchar(255)
数据类型的形式存在
我的companyxml作为text
数据类型
SELECT [bus_id] FROM [dbo].[tbl_businesses]
WHERE [bus_id] NOT IN (SELECT cmp_companyXML FROM tbl_companyinfo WHERE
cmp_approved = 'Approved')
我收到此错误
Msg 402,Level 16,State 1,Line 2 数据类型text和varchar在等于运算符中不兼容。
由于我在两个表中都没有任何类似的数据,因此我必须使用子查询。我也在做NOT IN
所以我必须评估每个业务,然后评估我所批准的所有公司xml,并且只有在不存在的情况下才选择它。
答案 0 :(得分:1)
使用CAST
将列强制转换为varchar(max)以进行有效的SQL比较。
select [bus_id] from [dbo].[tbl_businesses]
where [bus_id] not in
(select cast(cmp_companyXML as varchar(max))
from tbl_companyinfo
where cmp_approved = 'Approved')
答案 1 :(得分:1)
这是因为text数据类型不兼容。看看这篇文章。它可能对您有用:https://blog.sqlauthority.com/2012/12/04/sql-server-fix-error-402-the-data-types-ntext-and-varchar-are-incompatible-in-the-equal-to-operator/
您可以在子查询中使用convert命令:
select CONVERT(VARCHAR(MAX), cmp_companyXML)...