sql – 数据类型文本不能用作UNION,INTERSECT或EXCEPT运算符的操作数,因为它不可比

前端之家收集整理的这篇文章主要介绍了sql – 数据类型文本不能用作UNION,INTERSECT或EXCEPT运算符的操作数,因为它不可比前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张桌子

> Id(PK)
>所有者int
>说明文字

它连接到另一个表

> Id(FK)
>参与者int

所有者可以是参与者,如果是,所有者和参与者都是相同的参考(在用户表中).所以我做了:

SELECT TableA.Id,TableA.Owner,TableA.Text
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,TableA.Owner.TableA.Text
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User

查询应返回所有不同的数据集,其中某个@User是所有者或参与者或两者.

而如果sql Server不会抛出它

The data type text cannot be used as an operand to the UNION,INTERSECT or EXCEPT operators because it is not comparable.

由于Id是一个PK,而Text来自同一个表,sql Server为什么要比较Text?

我可以使用UNION ALL来停止重复检测,但是我可以规避这一点,而不会失去结果的明显性?

解决方法

正确的方法

停止使用TEXT它已经过时了.改变表格.

ntext,text,and image data types will be removed in a future version
of Microsoft sql Server. Avoid using these data types in new
development work,and plan to modify applications that currently use
them. Use nvarchar(max),varchar(max),and varbinary(max) instead.

解决方法

投射到NVARCHAR(MAX):

SELECT TableA.Id,CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User
原文链接:https://www.f2er.com/mssql/76043.html

猜你在找的MsSQL相关文章