是否可以在ColdFusion中动态生成查询名称?

是否可以在ColdFusion中动态生成查询名称?,coldfusion,coldfusion-9,cfquery,Coldfusion,Coldfusion 9,Cfquery,我想做的是 <cfloop array="#LOCAL.someArray" index="LOCAL.aString"> <cfset LOCAL.queryName = "uniqueQueryName_" & LOCAL.aString /> <cfquery name="#LOCAL.queryName#" datasource="db" cachedwithin="#CreateTimeSpan(1,0,0,0)#">

我想做的是

<cfloop array="#LOCAL.someArray" index="LOCAL.aString">

    <cfset LOCAL.queryName = "uniqueQueryName_" & LOCAL.aString />

    <cfquery name="#LOCAL.queryName#" datasource="db" cachedwithin="#CreateTimeSpan(1,0,0,0)#">
        SELECT count(*) AS c FROM someTable
    </cfquery>

    <cfdump var="#LOCAL.queryName#" />
</cfloop>

从someTable中选择count(*)作为c
这是可能的,还是有更好的方法

编辑


这适用于
,但在我尝试执行

时不适用。您可以转储查询,我想也可以通过执行以下操作来访问它:

<cfloop list="q1,q2,q3" index="qname">


    <cfquery name="#qname#" datasource="dsn">
        SELECT * from some_table;
    </cfquery>

    <cfdump var="#Evaluate('#qname#')#" />
</cfloop>

从一些表格中选择*;

这个函数允许你做你想做的事。

没有必要使用
evaluate()
来做这件事,你不应该这样做(所以我否决了这个答案,对不起)

您只需使用关联数组表示法:

<cfdump var="#local[qname]#">
对于特定单元:

#local[qname][columnName][rowNumber]#

很少有情况下,
evaluate()
是任何问题的正确答案。人们不能依赖AdobeDocs,因为不幸的是,很多文档不是由非常有经验的ColdFusion开发人员编写的。

您尝试过这样做吗?你有什么错误吗?当我运行它时,
只输出名称的字符串值,
uniqueQueryName\u foo
uniqueQueryName\u bar
等。要动态访问查询行,请使用关联数组表示法ie
Local[“nameOfQuery”][“theColumnName”][rowNumber]
ahh是的范围在CF中作为结构处理,“我已经忘记了这一点,打得好。”@JamesRLamar-有时是的,或者当我没有时间写一个可靠的(经过测试的)答案时。这很有效,Adobe甚至在其文档中使用带查询的Evaluate。不要相信Adobe文档中的示例-不幸的是,这些示例并不总是明智的。@johnthexiii-永远不要假设文档中的片段总是良好编码实践的示例。它们只是用于演示,并不总是使用最佳实践。通常不鼓励
评估
。主要是因为它很少需要,但在某些情况下也会带来安全风险。在代码中,它是不需要的。只需使用关联数组表示法。您实际测试过它吗?无论我使用哪种英镑符号组合,我只能让该方法与
一起使用,这不是很有用。@johnthexiii-它工作得很好。我怀疑问题在于您的原始代码将查询放在
变量
范围内,而不是
本地
。您的查询声明应该更像:
我不是建议它是复制粘贴&它可以工作代码:它只是演示语法(是的,它可以工作)。我不得不承认,根据您最初的示例,我假设您是在局部范围内定义变量。我建议不要让查询在变量范围内浮动。只需创建一个结构来保存它和任何其他相关数据。
#local[qname][columnName][rowNumber]#