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

C# 使用表的Varchar列搜索另一个表中的文本列,c#,sql-server,tsql,C#,Sql Server,Tsql,我正在尝试查找所有不属于已批准的公司信息XML的业务Id 我的业务ID作为varchar(255)数据类型存在于我的业务表中 My companyxml在My companyinfo表中以文本数据类型存在 SELECT [bus_id] FROM [dbo].[tbl_businesses] WHERE [bus_id] NOT IN (SELECT cmp_companyXML FROM tbl_companyinfo WHERE cmp_approved = 'Approved')

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

我的业务ID作为
varchar(255)
数据类型存在于我的业务表中 My companyxml在My 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,16级,状态1,第2行 “等于”运算符中的数据类型text和varchar不兼容


因为两个表中都没有类似的数据,所以我不得不使用子查询。我也在做一个
不在
中的操作,因此我必须评估每个业务,然后评估我公司所有批准的XML,并仅在不在那里时选择它。

使用
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')

使用
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')

这是因为文本数据类型不兼容。看看这篇文章。它可能对您有用:

您可以在子查询中使用convert命令:

 select  CONVERT(VARCHAR(MAX), cmp_companyXML)...

这是因为文本数据类型不兼容。看看这篇文章。它可能对您有用:

您可以在子查询中使用convert命令:

 select  CONVERT(VARCHAR(MAX), cmp_companyXML)...

与您的问题无关,但如果您有XML数据,为什么不使用XML数据类型?
如果
cmp_companyXML
列可为空,则不在
中是危险的。与您的问题无关,但如果您有XML数据,为什么不使用XML数据类型?
不在
中是危险的,如果
cmp\u companyXML
是可为空的列。这是可行的,但看起来我的结果现在不起作用了哈哈,它会将我拥有的所有记录返回给我。你确定不需要
包含
而不是
中的
,这是可行的,但是看起来我的结果现在不起作用了哈哈,它会把我所有的记录都还给我你确定你不需要
包含
而不是
中的