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

时间:2012-10-16 17:20:58

标签: 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)#">
        SELECT count(*) AS c FROM someTable
    </cfquery>

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

这是可能的,还是有更好的方法呢?

修改

这适用于<cfloop query="LOCAL.queryName">,但在我尝试执行<cfset ArrayAppend(LOCAL.returnArray, LOCAL.queryName.c) />

时则不行

2 个答案:

答案 0 :(得分:10)

没有必要使用evaluate()来做这件事,而且不应该这样做(所以我已经对这个答案进行了低估,对不起)。

您需要做的就是使用关联数组表示法:

<cfdump var="#local[qname]#">

如果想要访问该查询的列,则为:

#local[qname][columnName]#

对于特定的细胞:

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

极少数情况下evaluate()是对任何事情的正确答案。人们不能依赖Adobe文档,因为 - 不幸的是 - 其中很多都不是由非常有经验的ColdFusion开发人员编写的。

答案 1 :(得分:0)

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

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


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

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

Evaluate功能可以让你做你想做的事。