加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:30:05 所属栏目:MsSql教程 来源:网络整理
导读:我有一张桌子 Id(PK) 所有者int 说明文字 它连接到另一个表 Id(FK) 参与者int 所有者可以是参与者,如果是,所有者和参与者都是相同的参考(在用户表中).所以我做了: SELECT TableA.Id,TableA.Owner,TableA.TextFROM TableAWHERE TableA.Owner=@UserUNIONSELECT
我有一张桌子

> 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读