SQL Server: IN ('asd') не работает, когда столбец NTEXT - PullRequest
2 голосов
/ 14 мая 2011

Как я могу решить эту проблему?

where someNtext IN ('asd',asd1')

выдает ошибку:

Сообщение 402, Уровень 16, Состояние 1, Строка XXXXX
Типы данных ntextи varchar несовместимы в операторе равенства.

Ответы [ 3 ]

5 голосов
/ 14 мая 2011

Список IN - это просто сокращение для условий ИЛИ.Предложение LIKE работает с полями NTEXT и TEXT.Таким образом, вы можете объединить эти две идеи, чтобы сделать это:

WHERE (
       someNtext LIKE N'asd'
OR     someNtext LIKE N'asd1'
      )

Однако, как @marc_s предложил в комментарии к Вопросу, NVARCHAR(MAX) предпочтительнее, так как все строковые функции работают с ним (и *Начиная с SQL Server 2005 типы данных 1009 *, NTEXT и IMAGE устарели.Вы можете выполнить встроенное преобразование, например:

WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1')

, но, скорее всего, это не будет работать так же хорошо, как использование предложения LIKE с условиями OR.

Обратите внимание: При работе с NTEXT / NVARCHAR / NCHAR / XML данными лучше всего всегда использовать префикс строковых литералов с заглавной буквой "N",Невыполнение этого требования может привести к потере данных для любых символов, не поддерживаемых кодовой страницей, связанной с сопоставлением по умолчанию для базы данных.

Дополнительные сведения о работе с параметрами сортировки / кодирования / Unicode / строк в целом в SQL ServerПожалуйста, посетите: https://Collations.Info/

0 голосов
/ 15 мая 2011

С http://msdn.microsoft.com/en-us/library/ms187993.aspx:

Типы данных ntext, text и image будут удалены в следующей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время. Используйте взамен nvarchar (max), varchar (max) и varbinary (max).

0 голосов
/ 14 мая 2011

NText не сравним с вами, не используйте его, если вам нужно сравнить, используйте nvarchar (MAX)

...