我有一个名为 dbo.Node 的表:
NodeID int
ParentNodeID int
Title
以下函数显示了层次结构
<cffunction name="getNodePath" returnType="string">
<cfargument name="NodeID" required="false" default="">
<cfset var qryNode = "">
<cfif NOT isNumeric(arguments.nodeID)>
<cfreturn "">
</cfif>
<cfquery name="qryNode" cachedWithin="#CreateTimeSpan(0,0,1,0)#">
SELECT ParentNodeID, Title
FROM dbo.Node WITH (NOLOCK)
WHERE NodeID = <cfqueryparam CFSQLType="CF_SQL_INTEGER" value="#arguments.NodeID#">
</cfquery>
<cfreturn getNodePath(qryNode.ParentNodeID) & qryNode.Title & " » ">
</cffunction>
此代码使用 cacheWithin 是因为已知会调用许多相同的父路径。平均而言,这会从原始页面调用大约 20 次。总体而言,由于查询的递归性质,它被调用了 100 次。此外,此函数返回一个字符串。这意味着格式在模型而不是视图中。
有没有办法用 CTE 代替它?