【发布时间】:2011-09-22 15:47:17
【问题描述】:
我有一个类似的查询:
选择项目ID FROM 项目表 WHERE itemID LIKE '%123%'
itemTable 是 INT 类型。这个查询本身就可以正常工作,因为它会选择“12345”和“0912398”等等......
当我尝试使用时出现问题
假设 var searchValue = 123
如果我尝试:<cfqueryparam cfsqltype='cf_sql_integer' value="'%#searchValue#%'" >
我得到 *CFSQLTYPE CF_SQL_INTEGER 的无效数据“123”。*
如果我尝试:<cfqueryparam cfsqltype='cf_sql_varchar' value="'%#searchValue#%'" >
我得到 java.lang.Integer 无法转换为 java.lang.String
我尝试在我的 SQL 中使用 CAST,并在不同的地方使用 toString(searchValue),但我总是以上面的错误消息之一结束。有没有办法使用 CFQUERYPARAM 搜索和整数表?
编辑:下面是我尝试使用的实际代码...
CFSCRIPT 代码:
var searchValue=123;
searchFilterQuery(qry=qItemResults, field="itemID", value=searchValue,cfsqltype="cf_sql_varchar");
CFC 功能:
<!--- FILTER A QUERY WITH SEARCH TERM --->
<cffunction name="searchFilterQuery" access="public" returntype="query" hint="Filters a query by the given value" output="false">
<!--- ************************************************************* --->
<cfargument name="qry" type="query" required="true" hint="Query to filter">
<cfargument name="field" type="string" required="true" hint="Field to filter on">
<cfargument name="value" type="string" required="true" hint="Value to filter on">
<cfargument name="cfsqltype" type="string" required="false" default="cf_sql_varchar" hint="The cf sql type of the value.">
<!--- ************************************************************* --->
<cfset var qryNew = QueryNew("")>
<cfquery name="qryNew" dbtype="query">
SELECT *
FROM arguments.qry
WHERE #trim(arguments.field)# LIKE <cfqueryparam cfsqltype="#trim(arguments.cfsqltype)#" value="#trim(arguments.value)#">
</cfquery>
<cfreturn qryNew>
</cffunction>
【问题讨论】:
-
RE:
I get *Invalid data '123' for CFSQLTYPE CF_SQL_INTEGER.*.. 这是因为 CF 期望您的value是有效的integer,例如123或212。但是您实际上传递的是文字字符串:'%123%'。显然不是整数。因此出现错误。
标签: sql tsql coldfusion