テーブルに、テキストデータ型であるMEMO_TEXTという列があります。ビューを作成してGROUP BYを使用しようとすると、次のエラーが発生します。
SQL Serverデータベースエラー:IS NULLまたはLIKE演算子を使用する場合を除いて、text、ntext、およびimageデータ型は比較またはソートできません。
クエリに対してDISTINCTを実行しようとすると、このエラーが発生します。これを回避する方法に関するアイデアはありますか?
さらに情報が必要な場合は、お知らせください。
それを回避する1つのハックは、それをnvarchar(max)
としてキャストすることです。
これは、文字列の長さを4,000を超えて増やす 文書化 方法です。
nvarchar [ ( n | max ) ]
可変長のUnicode文字列データ。 nは文字列の長さを定義し、1〜4,000の値を指定できます。 maxは、最大ストレージサイズが2 ^ 31-1バイト(2 GB)であることを示します。ストレージサイズは、バイト単位で、実際の長さの2倍です。入力されたデータの+ 2バイト。 nvarcharのISO同義語は、国別文字と国別文字で異なります。
同様のトリックが varchar() にも当てはまります。
これらを試してください...
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))
Ntextフィールドに繰り返しデータが存在しないことをご存知ですか?他のフィールドの派生テーブルで区別を行い、ntextフィールドを使用してテーブルに結合し、外部クエリでそれを取得できます。
のようなもの(フィールド3が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
列のデータ型をnvarchar(max)に変更できますか?
メモフィールドの最初の40文字程度を占める別の列に入力し、それをグループ化することを検討してください。大量のテキストがある場合、メモフィールドのグループ化は非常に遅くなります。
UPDATE myTable SET myNewField = LEFT(myOldField, 40);