1

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

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

4

2 回答 2

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) />
于 2016-05-18T18:57:30.250 回答
1

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

所以我这样做......

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

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

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

于 2016-05-18T18:38:46.143 回答