SQL: 无法比较或排序Grouptext、ntext和image数据类型

5
以下是一个 SQL 语句和我收到的错误。我希望将所有返回的项目按 prodID 进行分组。
错误:

文本、ntext 和图像数据类型不能进行比较或排序,除非使用 IS NULL 或 LIKE 运算符。

语句:
 SELECT TOP 20 
         PRODID, ITEMDES
         FROM orderedItems oi
         left join orders o on  oi.order_id = o.order_id
    Group by PRODID, ITEMDES

如果您使用的是 Sql Server 2005 或更新版本,则可以使用 varchar(max) 替代 TEXT。 - Nikola Markovinović
@Nikola Markovinović 我刚刚将ITEMDES更改为varchar(MAX),但仍然出现了相同的错误。 - Prometheus
可能会有其他错误-请参见此 Sql Fiddle,演示您可以按varchar(max)分组。 - Nikola Markovinović
你的PRODID和Order_ID列是int类型吗?它们是唯一被排序或比较的其他列。 - LukeHennerley
5
您选择了前20个结果,但没有添加ORDER BY语句。您知道吗,这可能导致您的查询结果在不同的时间会有所不同? - valex
显示剩余5条评论
2个回答

9
不可以。此外,它们已被废弃,推荐使用 (n)varchar(max) 类型。
如果您需要对其进行分组,请将数据结构从 (n)text 更改为 (n)varchar(max) 或在 group 子句中进行转换。
 GROUP BY ProdID, CONVERT(nvarchar(max), ItemDes)

0
如果 ITEMDES 是 TEXT 或 blob,您可以使用 ROW_NUMBER() 避免使用 GROUP BY:
select TOP 20 * from 
(

SELECT 
         PRODID,ITEMDES,
         ROW_NUMBER() over (partition by PRODID order by o.order_id) rn
         FROM orderedItems oi
         left join orders o on  oi.order_id = o.order_id
) as t 
where rn=1
order by PRODID; -- any order here you wish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接