可能存在Var范围界定问题



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

<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 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) />

我从未让LOCAL处理函数中查询的查询。

所以我这样做。。。。

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

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

最新更新