首页 > 解决方案 > 如何修复 SQL 错误 [306] [S0002]:text、ntext 和 image 数据类型无法比较或排序,除非使用 IS NULL 或 LIKE 运算符?

问题描述

使用“=”(等于运算符)比较 sql server 文本数据类型时出现问题。这是我的查询看起来像

 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, 这是我的表结构的一部分, 表 usulan_dpr 请帮助我

标签: castingsql-server-2017

解决方案


在您的查询中:

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

onlyORDER 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直接查。


推荐阅读