[CastleType]はSQL Serverでデータ型「テキスト」として設定されており、クエリは次のとおりです。
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
エラーが発生します:
データ型TEXTとVARCHARは、等号演算子では互換性がありません。
このデータ型をWHERE句でクエリできませんか?
回答:
のLIKE
代わりに使用できます=
。ワイルドカードがなければ、これは同じ効果があります。
DECLARE @Village TABLE
(CastleType TEXT)
INSERT INTO @Village
VALUES
(
'foo'
)
SELECT *
FROM @Village
WHERE [CastleType] LIKE 'foo'
text
廃止予定です。に変更するvarchar(max)
と、作業がしやすくなります。
また、データはどのくらいの大きさになる可能性がありますか?等価比較を行う場合は、この列にインデックスを付けるのが理想的です。このタイプのクエリを高速化するために使用できる計算された列checksum
またはhash
列を追加できますが、列を900バイトより広いものとして宣言する場合、これは不可能です。
それはエラーメッセージが言うことではありません。=
演算子は使用できないと書いてあります。たとえば試してみてくださいLIKE 'foo'
。
Col IN ('foo', 'bar')
基本的に同じでCol = 'foo' or Col = 'bar'
あり、同じ問題が発生します。
別のオプションは次のとおりです。
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
like 'foo'
このアプローチよりも良いカーディナリティの推定値を与えるかもしれないが、100%を確認していません。
VARCHAR(MAX)
代わりに使用TEXT
-そのデータ型は非推奨