我在SQL中使用LongText
列时遇到一个小时左右的问题。
我目前正在开发一个Web项目,在某些时候我们有一个搜索表单,允许用户搜索许多字段。由于客户的用户被迫使用IE 9,我们必须创建一个javascript ...脚本,解析整个表单,只需要所需的内容,以免超过IE的2k字符限制。
到目前为止,脚本工作正常,直到我们添加了一个textarea
字段,代表我们数据库中的LongText
列。问题似乎来自SQL不会将SQL语句中的简单String
作为LongText。
以下是查询的内容:
SELECT * FROM SONORA.CF_CPR_CASE WHERE CASEFOLDERID != 2
and CMF_VLM_APPLICATION like '%CPR%' and CPR_DESCRIPTION='rererere'
and CMF_TYPE_CASE_FK like '%LC_130125_074927_000001_60%'
但是我收到了这个错误:
EJBException:; nested exception is: javax.ejb.EJBException: The data types ntext
and varchar are incompatible in the equal to operator.S_EXCP(204); nested
exception is: javax.ejb.EJBException: The data types ntext and varchar
are incompatible in the equal to operator.S_EXCP(204)
Found in FmsQuery: SELECT * FROM {{DBTABLEPREFIX}}CF_CPR_CASE WHERE
CASEFOLDERID != 2 and CMF_VLM_APPLICATION like '%CPR%' and
CPR_DESCRIPTION='ztztztztz' and CMF_TYPE_CASE_FK like
'%LC_130125_074927_000001_60%'
我们使用的CASE360并不是那么着名,但仍然无关紧要,我们正在通过javascript构建SQL语句的“where子句”,然后将其发送到CASE360处理器,它将全部执行并执行查询。这部分工作正常,它只是LongText列,这让我很难过。
如果你们知道这个SQL Query应该成功解释什么,那么我会非常高兴!
提前感谢您的帮助。
答案 0 :(得分:2)
您可以尝试使用CAST
列上的ntext
。我不清楚哪一列会出现上述错误。例如,我们假设它是CPR_DESCRIPTION
列:
SELECT *
FROM SONORA.CF_CPR_CASE
WHERE CASEFOLDERID != 2
and CMF_VLM_APPLICATION like '%CPR%'
and CAST(CPR_DESCRIPTION as varchar(2000)) ='rererere'
and CMF_TYPE_CASE_FK like '%LC_130125_074927_000001_60%'
;
请注意,您需要为演员阵容选择适当大的varchar
大小,即使是最大尺寸,也有可能导致数据丢失。