2013-12-18 153 views
3

我想看看在表MMOUTBOUND中重复字段MSGTEXT多少次。对于我使用下面的查询:GROUP BY for ntext data

SELECT 
    MSGTEXT, 
    COUNT(*) TotalCount 
FROM MMOUTBOUND 
GROUP BY MSGTEXT 
HAVING COUNT(*)>1; 

,但我得到一个错误,因为ntext数据类型不能比较或排序。我怎样才能达到这个ntext数据类型?

+1

'ntext','text'和'image'数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前正在使用它们的应用程序。改为使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [详见这里](http://msdn.microsoft.com/en-us/library/ms187993.aspx) - 立即停止使用'Ntext' - 用'nvarchar(max)'替换它,然后你会还能够在这些列上进行比较和排序! –

回答

8

您不能直接对整个列。但是,间接地,您可以通过此转换来转换前N个字符和组,例如,

SELECT CONVERT(NVARCHAR(100), MSGTEXT), COUNT(*) TotalCount 
FROM MMOUTBOUND 
GROUP BY CONVERT(NVARCHAR(100), MSGTEXT) 
HAVING COUNT(*)>1; 

正如其他人所指出的,请注意,您应将NTEXT列转换为NVARCHAR(MAX)

+0

请注意,'marc_s'解决方案应该比'NTEXT'更适合这种解决方法。 NVARCHAR(MAX)可以直接分组,即使对于> 4000的NVARCHAR长度也是如此。[Fiddle here](http://www.sqlfiddle.com/#!6/aa596/2) – StuartLC