Где [CastleType] установлен как тип данных "текст" в SQL Server и запрос:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
Я получаю сообщение об ошибке:
Типы данных TEXT и VARCHAR несовместимы в операторе равенства.
Могу ли я не запрашивать этот тип данных с помощью предложения WHERE?
sql-server
sql-server-2005
tsql
mmcglynn
источник
источник
VARCHAR(MAX)
вместоTEXT
- этот тип данных устарелОтветы:
Вы можете использовать
LIKE
вместо=
. Без подстановочных знаков это будет иметь тот же эффект.DECLARE @Village TABLE (CastleType TEXT) INSERT INTO @Village VALUES ( 'foo' ) SELECT * FROM @Village WHERE [CastleType] LIKE 'foo'
text
не рекомендуется. Переход кvarchar(max)
вам будет легче работать.Также насколько велики могут быть данные? Если вы собираетесь проводить сравнения на равенство, в идеале вам нужно проиндексировать этот столбец. Это невозможно, если вы объявите столбец размером более 900 байт, хотя вы можете добавить вычисляемый столбец
checksum
илиhash
столбец, который можно использовать для ускорения этого типа запроса.источник
Пожалуйста, попробуйте это
SELECT * FROM [Village] WHERE CONVERT(VARCHAR, CastleType) = 'foo'
источник
Вы не можете сравнивать
text
с=
оператором, вместо этого необходимо использовать одну из функций сравнения, перечисленных здесь . Также обратите внимание на большое окно с предупреждением в верхней части страницы, это важно.источник
Если вы не можете изменить тип данных в самой таблице для использования varchar (max), измените свой запрос на это:
SELECT * FROM [Village] WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
источник
В сообщении об ошибке говорится не об этом. Там написано, что нельзя пользоваться
=
оператором. Попробуйте, напримерLIKE 'foo'
.источник
Col IN ('foo', 'bar')
в основном то же самое,Col = 'foo' or Col = 'bar'
и будет та же проблема.Другой вариант:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
источник
like 'foo'
может дать лучшие оценки мощности, чем этот подход, но я не уверен на 100%.Это работает в MSSQL и MySQL:
SELECT * FROM Village WHERE CastleType LIKE '%foo%';
источник