电子邮件属于表格预订,其定义为类型"文字"在我们的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
答案 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
理想情况下,您会找到避免这种黑客攻击的方法,但这在某些情况下可能很有用。