在表格中,我有一个名为MEMO_TEXT的列,它是一种文本数据类型。当我尝试创建一个视图并使用GROUP BY时,我收到以下错误:
SQL Server数据库错误:无法比较或排序text,ntext和image数据类型,除非使用IS NULL或LIKE运算符。
当我尝试对查询执行DISTINCT时,我收到此错误。关于如何解决这个问题的任何想法?
如果您需要更多信息,请告诉我们。
答案 0 :(得分:38)
围绕它的一个方法是将其转换为nvarchar(max)
。
这是一种documented方法,可将字符串长度增加到4,000以上:
nvarchar [ ( n | max ) ]
可变长度的Unicode字符串数据。 n定义字符串长度,可以是1到4,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。存储大小(以字节为单位)是输入数据的实际长度的两倍+ 2个字节。 nvarchar的ISO同义词是国家字符变化和国家字符变化。
类似的技巧适用于varchar()。
答案 1 :(得分:22)
试试这些......
SELECT DistinctMemo = DISTINCT(CAST(MEMO_TEXT AS varchar(max)))
FROM MyTable
-- or
SELECT DistinctMemo = CAST(MEMO_TEXT AS varchar(max))
FROM MyTable
GROUP BY CAST(MEMO_TEXT AS varchar(max))
答案 2 :(得分:1)
您知道ntext字段中永远不会有重复数据吗?您可以在其他字段的派生表中执行distinct,然后使用ntext字段连接到表,并在外部查询中抓取它。
类似的东西(假设field3是ntext字段)
select mt.idfield, a.field1, a.field2, mt.field3
from mytable mt
join
(select disitinct mt1.idfield, mt1.field1, mot.field2 from mytable mt1
join myothertable mot on mt1.idfield = mot.idfield) a
on a.ifield = mt.idfield
答案 3 :(得分:0)
您能否只将列的数据类型更改为nvarchar(max)?
考虑放入另一个列,其中包含备注字段的前40个字符左右,并对其进行分组。如果你有很多文本,那么对备忘录字段进行分组会非常慢。
UPDATE myTable SET myNewField = LEFT(myOldField, 40);