<text> ntext和image data>&gt;类型无法比较或排序,除非使用IS NULL或LIKE&gt;操作者

时间:2013-02-20 12:02:56

标签: sql sql-server

电子邮件属于表格预订,其定义为类型&#34;文字&#34;在我们的Microsoft SQL Server

SELECT email, 
 COUNT(email) AS NumOccurrences
FROM Booking
GROUP BY email
HAVING ( COUNT(email) > 1 )

运行上述查询后(尝试在预订中查找重复的电子邮件) 我收到了这样的错误消息:

  

text,ntext和image数据   除非使用IS NULL或LIKE,否则无法比较或排序类型   操作

我正在使用Microsoft Sql

2 个答案:

答案 0 :(得分:55)

因为您使用的是SQL Server,为什么不将数据类型更改为VARCHAR(100)

要在不更改数据类型的情况下解决此错误,TEXT or NTEXT列在VARCHAR or NVARCHAR子句或ORDER BY子句中使用时需要转换为GROUP BY。一个SELECT声明。例如,这是一点点凌乱

SELECT  CAST(email AS NVARCHAR(100)) email, 
        COUNT(CAST(email AS NVARCHAR(100))) AS NumOccurrences
FROM    Booking
GROUP   BY CAST(email AS NVARCHAR(100))
HAVING  COUNT(CAST(email AS NVARCHAR(100))) > 1 

答案 1 :(得分:0)

由于我的ORM存在问题,我的接受答案有问题。该答案仅是当无法接受的答案时解决的方法,并且仅在您将分组列作为分组依据时才有效,因为这是必需的,因此您可以在选择中包括该列。

它将列强制转换为聚合函数内部,以便在分组依据中不需要该列,并且不会发生错误,并且返回的数据仍应正确。

MIN(CAST(email AS NVARCHAR(4000))) as email

理想情况下,您会找到避免这种黑客攻击的方法,但这在某些情况下可能很有用。