1

在使用coldfusion的查询中插入LIKE并在我的参数中使用通配符时遇到了一些麻烦。这是目前有效的:

<cfquery name="sample" datasource="database"><!---Take the query here--->
    SELECT * <!---select all--->
    FROM table <!---from the table "table"
    WHERE 
    <cfloop from="1" to="#listLen(selectList1)#" index="i">
        #ListGetAt(selectList1, i)# = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ListGetAt(selectList2,i)#" /> <!---
                                                    search column name = query parameter

                                                    using the same index in both lists
                                                    (selectList1) (selectList2) --->
    <cfif i neq listLen(selectList1)>AND</cfif> <!---append an "AND" if we are on any but
                                                the very last element of the list (in that
                                                case we don't need an "AND"--->
    </cfloop>
</cfquery>

我的目标是在可以输入参数的地方获取代码(但它目前不起作用 - 错误读取无法执行查询)

<cfquery name="sample" datasource="database"><!---Take the query here--->
    SELECT * <!---select all--->
    FROM table <!---from the table "table"
    WHERE 
    <cfloop from="1" to="#listLen(selectList1)#" index="i">
        #ListGetAt(selectList1, i)# LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ListGetAt(selectList2,i)#%" /> <!---
                                                    search column name = query parameter

                                                    using the same index in both lists
                                                    (selectList1) (selectList2) --->
    <cfif i neq listLen(selectList1)>AND</cfif> <!---append an "AND" if we are on any but
                                                the very last element of the list (in that
                                                case we don't need an "AND"--->
    </cfloop>
</cfquery>
4

1 回答 1

0

你的语法看起来不错。我在针对 Microsoft SQL Server 运行的一些代码中使用了相同的逻辑。

试试这个来调试你的代码并查看正在生成的 SQL。

<!--- Comment out your query tag to debug <cfquery name="sample" datasource="database"> --->

<cfoutput> <!--- add a cfoutput tag to "see" your generated code --->
SELECT *
FROM table
WHERE 
<cfloop from="1" to="#listLen(selectList1)#" index="i">
    #ListGetAt(selectList1, i)# LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ListGetAt(selectList2,i)#%" /> 
    <cfif i neq listLen(selectList1)>AND</cfif> 
</cfloop>
</cfoutput> <!--- add a cfoutput tag to "see" your generated code --->

<!--- Comment out your query tag to debug </cfquery> --->

这很可能会破坏依赖于查询的其余代码。<cfabort>我通常只是在结束标签之后贴一个标签</cfoutput>来停止处理并只显示 SQL。

这样做的目的是将生成的 SQL 代码输出到您的浏览器。看看它,看看你是否能发现错误。您还可以将生成的 SQL 复制并粘贴到您的查询工具(查询分析器)中并以这种方式进行测试。

于 2013-06-10T15:18:09.690 回答