【发布时间】:2012-12-02 19:35:38
【问题描述】:
我有一个名为 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 替换它?
【问题讨论】:
标签: sql-server recursion coldfusion common-table-expression