Sql server 用于从父子层次结构表中获取所有子级和父级的SQL Server视图

Sql server 用于从父子层次结构表中获取所有子级和父级的SQL Server视图,sql-server,view,hierarchy,Sql Server,View,Hierarchy,在Sql Server 2012中,我有一个表名为(cid、名称、父项\u cid)命名为类别。 现在,当我搜索某个特定类别中的内容时,我需要搜索其所有子类别(包括所有孙辈)和所有父类别(包括孙辈)。 目前,我正在使用存储过程获取所提供类别的所有孩子和家长,然后根据他们的基础进行筛选并返回结果。 当然,这不是一个好的解决方案,也是资源的浪费。 最好对此有一个看法。我可以从中获取某个类别(包括其本身)的所有家长和孩子。 我可以说视图可能看起来像什么: cid(代表我感兴趣的所有孩子和家长的cid)

在Sql Server 2012中,我有一个表名为(cid、名称、父项\u cid)命名为类别。
现在,当我搜索某个特定类别中的内容时,我需要搜索其所有子类别(包括所有孙辈)和所有父类别(包括孙辈)。
目前,我正在使用存储过程获取所提供类别的所有孩子和家长,然后根据他们的基础进行筛选并返回结果。
当然,这不是一个好的解决方案,也是资源的浪费。
最好对此有一个看法。我可以从中获取某个类别(包括其本身)的所有家长和孩子。
我可以说视图可能看起来像什么:
cid(代表我感兴趣的所有孩子和家长的cid)
相关的cid(具有此cid的所有子项和父项)

我无法从我的视图中选择相关,其中cid=SOMEID
我将拥有提供给我的所有父母和孩子 我正在寻找的这种观点也可能不是一个好的解决方案。因此,无论是这种观点还是解决这个问题的任何其他方法都将是非常好的。
提前谢谢你。
编辑: 澄清->我还没有视图,我正在寻找如何创建一个视图来完成上述任务。希望它现在更清晰。
EDIT2:我已经包含了当前用于获取特定类别的所有父级和子级的存储过程。我尝试将其转换为我之前解释过的视图,但没有成功。因为我正在寻找一个视图,在该视图中,我可以将所有类别的所有子类别和父类别放在表中。
但是当前过程返回所有父类别和子类别及其各自的直接父类别和名称

create procedure mysp_getAllChildAndParentCategories @id INT as
WITH Parent AS (
    SELECT cid, name, parent_cid
    FROM category
    WHERE cid = @Id
UNION ALL
    SELECT a.cid, a.name, a.parent_cid
    FROM category a
    INNER JOIN Parent B ON B.cid = A.parent_cid
), 
    --Get Childs of @Id
Child AS (
        SELECT cid, name, parent_cid
        FROM category
        WHERE cid = @Id 
    UNION ALL
        SELECT a.cid, a.name, a.parent_cid
        FROM category A
        INNER JOIN Child B ON B.parent_cid = A.cid
        )

    SELECT * FROM Parent
    UNION
    SELECT * FROM Child;

这里有实际问题吗?你想干什么?你看过递归cte吗?是的,我看过,这就是我在存储过程中使用的。我能问一下我的问题中的模糊性是什么吗?所以我可以澄清一下,你的问题似乎是“这是一个好的方法吗?”,这是一个离题的问题,因为这是一个意见问题,也太宽泛了,无法回答,因为它取决于太多在你的问题中没有表达的因素,比如观点的目的是什么。为什么您认为您的存储过程是一种糟糕的方法?好吧,让em编辑以简化。好吧,现在不清楚的是,为什么您不能从存储过程中获取代码并将其转换为视图?你不知道该怎么做?你现在有什么代码?请将存储过程的代码张贴在您当前使用递归cte的位置。