使用表的Varchar列在另一个表中搜索文本列

时间:2017-06-28 18:01:12

标签: c# sql-server tsql

我正在尝试查找不属于已批准公司信息XML的所有业务ID。

我的商家ID在我的商家信息表中以varchar(255)数据类型的形式存在 我的companyxml作为text数据类型

存在于我的companyinfo表中
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,并且只有在不存在的情况下才选择它。

2 个答案:

答案 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)...