Как правильно сравнить столбец NTEXT с постоянным значением? - PullRequest
58 голосов
/ 23 августа 2010

Если я использую что-то вроде

[ntext2] <> '1,032.5',

, я получаю эту ошибку:

Типы данных ntext и varchar несовместимы в операторе не равно.

Наилучшее возможное решение было бы, если бы сравнение осуществлялось одинаково для любого типа столбца.(оператор <> применим как для NVARCHAR, так и для INT).

Ответы [ 2 ]

66 голосов
/ 23 августа 2010

Тип данных ntext устарел в пользу типа данных nvarchar(max).Если вы можете изменить тип данных в таблице, это будет лучшим решением.Тогда нет проблем, сравнивая его с литералом varchar.

В противном случае вам придется привести значение перед его сравнением:

cast([ntext2] as nvarchar(max)) <> '1,032.5'

Вы также можете рассмотреть использование литерала nvarchar,которая решает некоторые похожие проблемы типов данных:

cast([ntext2] as nvarchar(max)) <> N'1,032.5'
11 голосов
/ 23 августа 2010

Если вы не хотите читать, вы можете обойтись в некоторых сценариях, используя LIKE или PATINDEX, как показано в этом потоке MSDN: http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41

Выражение LIKE без подстановочных знаков будет (в данном случае) примерно эквивалентно критерию равенства.

В этом случае выражение будет:

[ntext2] NOT LIKE '1,032.5'
...