当需要使用var作用域时,如何在n-recordset上使用查询查询UNION?

Dan*_*rts 5 coldfusion cfquery qoq

我希望能够向UNION查询未知数量的记录集.但是,在记录集名称中不允许执行查询查询点或括号时.

例如,这失败了:

<cfquery name="allRecs" dbtype="query">
    SELECT * FROM recordset[1]
    UNION
    SELECT * FROM recordset[2]
</cfquery>
Run Code Online (Sandbox Code Playgroud)

使用动态变量名称,例如"recordset1"工作,但这是在一个函数中,需要变量范围,所以我不能动态地建立变量名称而不会在持久化对象中产生内存泄漏.

还有其他想法吗?

Tom*_*lak 1

困难的任务。我可以想象一个基于GetColumnNames()、 使用QueryAddRow()和的嵌套循环解决方案QuerySetCell()。它不会是最有效的,但也不是很慢。当然,这取决于任务的大小。

当您创建“创建一个组合两个记录集的函数”来接受例如十个参数时,您的“创建一个组合两个记录集的函数”可以变得更加高效。即时修改 SQL:

<cfset var local = StructNew()>

<cfquery name="local.union" dbtype="query">
  SELECT * FROM argument1
  <cfloop from="2" to="#ArrayLen(arguments)#" index="local.i">
    <cfif IsQuery(arguments[local.i])>
      UNION
      SELECT * FROM argument#local.i#
    </cfif>
  </cfloop>
</cfquery>

<cfreturn local.union>
Run Code Online (Sandbox Code Playgroud)