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



>我有一个表格

  • 身份证 (PK)
  • 所有者 int
  • 说明文本文本

连接到另一个表

  • 编号 (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不会抛出

数据类型文本不能用作 UNION、INTERSECT 或 EXCEPT 运算符的操作数,因为它不具有可比性。

既然 Id 是 PK,而 Text 来自同一个表,为什么 SQL Server 要比较 Text呢?

我可以使用UNION ALL来阻止重复检测,但我是否可以在不丢失结果的独特性的情况下绕过它?

正确的方法

停止使用TEXT它已经过时了。更改表架构。

ntext、text 和 image 数据类型将在将来的版本中删除 的Microsoft SQL Server。避免在新的 开发工作,并计划修改当前使用的应用程序 他们。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

解决方法

投射到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

相关内容

最新更新