Sql server 2005 在递归存储过程中选择记录

Sql server 2005 在递归存储过程中选择记录,sql-server-2005,tsql,stored-procedures,recursion,Sql Server 2005,Tsql,Stored Procedures,Recursion,我有一个内容管理系统,它包含类别的层次结构,每个级别的子类别都有不同的排序选项。目前,这是通过一系列(相当大的)查询来检索的……但我正试图通过使用递归存储过程来加快速度 (据我所知,使用CTE是最好的。但我不确定是否有一种方法可以做到这一点,如果订购可能因级别而异。如果我错了,请纠正我。) 所以,我已经把所有这些都做好了…除了我不知道如何通过循环记录来查询我找到的每个类别的子项。我尝试过使用游标,但似乎排序也是个问题。(再说一次,如果我错了,请纠正我。) 以下是代码(从创建临时表的父过程调用):

我有一个内容管理系统,它包含类别的层次结构,每个级别的子类别都有不同的排序选项。目前,这是通过一系列(相当大的)查询来检索的……但我正试图通过使用递归存储过程来加快速度

(据我所知,使用CTE是最好的。但我不确定是否有一种方法可以做到这一点,如果订购可能因级别而异。如果我错了,请纠正我。)

所以,我已经把所有这些都做好了…除了我不知道如何通过循环记录来查询我找到的每个类别的子项。我尝试过使用游标,但似乎排序也是个问题。(再说一次,如果我错了,请纠正我。)

以下是代码(从创建临时表的父过程调用):


我们将非常感激您的指点。非常感谢。

我只是从StackOverflow开始,寻找问题的答案。你的答案看起来很有趣,但要真正创建开发和测试答案所需的样本记录,需要做很多工作

建议-使用下面的链接(如何在论坛上发布数据/代码以获得最佳帮助)

它将为您提供有关创建示例数据脚本的提示,以使您的问题易于解决


Sylvia

如果我理解你的问题,你的任务需要递归CTE。调查这件事
. 这里有一个更简单的例子

我看不懂。你需要一些换行符。从哪里来?你要参加什么?
BEGIN
SET NOCOUNT ON;

DECLARE @parent_new int, @custom_order_new varchar(1);
DECLARE @title varchar(255), @is_nav_hidden bit, @display int;

-- store the information about this category into the temp table
IF @parent > 0
BEGIN
    INSERT INTO #CategoryListTemp SELECT DISTINCT c.id, c2c.id_parent, c.title, cp.id, c.page_order, null, c.is_published, cu.is_album, u.firstname, u.lastname, c.is_nav_hidden from categories_categories c2c, categories c LEFT JOIN categories_users cu ON c.id=cu.id_category LEFT JOIN users u ON cu.id_user=u.id LEFT JOIN categories_pages cp ON c.id=cp.id_category AND cp.id_page=@id where c2c.id_category=c.id and c.id=@parent;
END

-- and then find out about its children
IF @custom_order='c' BEGIN
    SELECT DISTINCT @parent_new = c.id, @custom_order_new = c.page_order, @title=c.title, @is_nav_hidden=c.is_nav_hidden from categories_categories c2c, categories c where c2c.id_category=c.id and c2c.id_parent=@parent order by c.is_nav_hidden, c.title;
END
ELSE
BEGIN
    SELECT DISTINCT @parent_new = c.id, @custom_order_new = c.page_order, @is_nav_hidden=c.is_nav_hidden, @display=c2c.display, @title=c.title from categories_categories c2c, categories c where c2c.id_category=c.id and c2c.id_parent=@parent order by c.is_nav_hidden, c2c.display, c.title;
END

if @parent_new IS NOT NULL BEGIN
    EXEC GetCategoryListData @id, @parent_new, @custom_order_new
END
END