Ale*_*der 15 sql t-sql sql-server union
我有一张桌子
它连接到另一个表
所有者可以是参与者,如果是,则所有者和参与者中的相同参考(进入用户表).所以我做了:
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
Run Code Online (Sandbox Code Playgroud)
此查询应返回所有不同的数据集,其中某个@User是所有者或参与者或两者.
如果SQL Server不抛出,它会
数据类型文本不能用作UNION,INTERSECT或EXCEPT运算符的操作数,因为它不具有可比性.
由于Id是PK,而Text来自同一个表,为什么SQL Server想要比较Text呢?
我可以UNION ALL
用来阻止重复检测,但是我可以绕过这一点而不会失去结果的清晰度吗?
Luk*_*zda 31
正确的方式
停止使用TEXT
它已经过时了.更改表架构.
将来的Microsoft SQL Server版本中将删除ntext,text和image数据类型.避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序.请改用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
Run Code Online (Sandbox Code Playgroud)