我有一张 table
- ID(PK)
- 所有者整数
- DescriptionText 文本
连接到另一个表
- 身份证件(外籍)
- 参与者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,TableA.Owner, CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA
WHERE TableA.Owner=@User
UNION
SELECT TableA.Id,TableA.Owner, CAST(TableA.DescriptionText AS NVARCHAR(MAX))
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User
关于sql - 数据类型 text 不能用作 UNION、INTERSECT 或 EXCEPT 运算符的操作数,因为它不具有可比性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897677/