我的功能中有几次我有这样的东西:
<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
可能在其他调用中被引用。我的意思是,它不像是在数据上运行多个线程,但这可能是原因吗?还有其他原因吗?当我收到错误时,情况并非总是如此。我也在一个只运行一次的页面上得到它。
答案 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>
我强烈建议您为查询使用更明确的名称,尤其是在查询查询时。