Var范围问题可能吗?

时间:2016-05-18 18:25:15

标签: coldfusion scope qoq

我的功能中有几次我有这样的东西:

<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可能在其他调用中被引用。我的意思是,它不像是在数据上运行多个线程,但这可能是原因吗?还有其他原因吗?当我收到错误时,情况并非总是如此。我也在一个只运行一次的页面上得到它。

2 个答案:

答案 0 :(得分:3)

在查询查询中,在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) />

答案 1 :(得分:1)

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

所以我这样做....

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

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

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