Как исправить ошибку SQL [306] [S0002]: типы данных text, ntext и image нельзя сравнивать или сортировать, кроме случаев использования оператора IS NULL или LIKE? - PullRequest
0 голосов
/ 21 декабря 2018

У меня проблема при использовании "=" (равно оператору) для сравнения текстовых данных типа сервера SQL.Это мой запрос выглядит как

 SELECT * FROM dbeplanningv3.dbo.usulan_dpr
 WHERE  CONVERT(VARCHAR, evaluasi) is null 
 or 
 trim(CONVERT(VARCHAR, evaluasi)) = '' ORDER BY [detail] ASC OFFSET 0 ROWS  
 FETCH NEXT 10 ROWS ONLY

, как вы видите в моем сценарии выше.Я делаю тип данных с этим CONVERT(VARCHAR, evaluasi), но все еще не работает, и я получаю ошибку SQL Error [306] [S0002]: The text, ntext, and image data types cannot be compared or sorted, это часть моей структуры таблицы table usulan_dpr помогите мне, пожалуйста

1 Ответ

0 голосов
/ 21 декабря 2018

В вашем запросе:

SELECT * FROM dbeplanningv3.dbo.usulan_dpr
WHERE  CONVERT(VARCHAR, evaluasi) is null 
or 
trim(CONVERT(VARCHAR, evaluasi)) = '' ORDER BY [detail] ASC OFFSET 0 ROWS  
FETCH NEXT 10 ROWS ONLY

только ORDER BY [detail] может вызвать эту ошибку, поэтому я предполагаю, что [detail] имеет тип text (этот столбец не виден на вашем скриншоте).Чтобы избежать ошибки, следует преобразовать ее в varchar (max):

SELECT * FROM dbeplanningv3.dbo.usulan_dpr
WHERE  CONVERT(VARCHAR, evaluasi) is null 
or 
trim(CONVERT(VARCHAR, evaluasi)) = '' ORDER BY convert(varchar(max), [detail]) ASC OFFSET 0 ROWS  
FETCH NEXT 10 ROWS ONLY

Но важный вопрос заключается в том, почему в SQL Server 2012 вы все еще используете тип данных text?Вы должны конвертировать их в varchar(max) и избегать их разыгрывания постоянно.

Кроме того, этот разыгрывание CONVERT(VARCHAR, evaluasi) is null бессмысленно.Вы можете проверить evaluasi is null напрямую.

...