使用“ =”(等于运算符)比较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,
这是我表结构的一部分
请帮助我
答案 0 :(得分:1)
在您的查询中:
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
。