Var 范围问题可能?

Var scoping issue possibly?

在我的函数中有几次我有这样的东西:

<cffunction name="mergeData">
<cfquery name="myQuery">
SELECT columnName FROM tableName
</cfquery>

<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM myQuery
</cfquery>
</cffunction>

<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />

偶尔我会得到错误The select column reference [myQuery.columnname] is not found in table [myQuery].

那么可能是什么原因造成的。我该如何诊断。我当时认为这可能是一个范围问题,所以我要添加 <cfquery name="local.myQuery"> 只是为了确保函数中包含一些东西(无论如何我都应该这样做)。但是,当某些事情只发生时,有时我很难弄清楚如何诊断。

编辑:更清楚地说明了为什么它最有可能是范围界定问题。我的想法是 myQuery 可能在其他调用中被引用。我的意思是,这不像是 运行 数据上的多个线程,但这可能是原因吗?还有其他原因吗?当我收到错误时,情况并非总是如此。我也在一个页面上找到它,它的功能只有 运行 一次。

我从来没有使用 LOCAL 来处理函数中的查询。

所以我这样做....

<cffunction>
<cfquery name="VARIABLES.myQuery">
SELECT columnName FROM tableName
</cfquery>

<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM VARIABLES.myQuery
</cfquery>
<cffunction>

我强烈建议为您的查询使用更明确的名称,尤其是在查询的查询中。

在查询的查询中,在 local 范围前缀两边使用方括号。

<cffunction name="mergeData">
    <cfquery name="local.myQuery">
        SELECT columnName FROM tableName
    </cfquery>

    <cfquery dbtype="query" name="local.myOtherQuery">
        SELECT columnName FROM [local].myQuery
    </cfquery>
</cffunction>

<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />