Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取所有子单元的更有效方法_C#_Sql_Database - Fatal编程技术网

C# 获取所有子单元的更有效方法

C# 获取所有子单元的更有效方法,c#,sql,database,C#,Sql,Database,我在SQL中有一个表,它通过parentID链接到自身。我想找到孩子和他们的孩子等等,直到我找到所有的孩子对象。我有一个递归函数可以实现这一点,但它似乎非常无效 有没有办法让sql找到所有子对象?如果是,怎么做 使用:您要查找的Microsoft SQL Server Management Studio Express 9.00.2047.00。 . 您至少需要SQL Server 2005。看看如何使用 根据树的深度,您可能需要查看 查询提示我建议使用类似的方法 其思想是为每个节点存储额外的两

我在SQL中有一个表,它通过parentID链接到自身。我想找到孩子和他们的孩子等等,直到我找到所有的孩子对象。我有一个递归函数可以实现这一点,但它似乎非常无效

有没有办法让sql找到所有子对象?如果是,怎么做

使用:您要查找的Microsoft SQL Server Management Studio Express 9.00.2047.00


.
您至少需要SQL Server 2005。

看看如何使用

根据树的深度,您可能需要查看


查询提示

我建议使用类似的方法

其思想是为每个节点存储额外的两个整数(通常称为“左”和“右”),根据您可以通过以下链接了解的系统计算。然后查询任意节点的所有子代就变得微不足道了


编辑:是一个更详细的描述。

这些查询通常是手工编写的(或查询设计器),带有
内部联接
左联接
。我想找到子对象及其子对象,依此类推,直到找到哪个数据库的所有子对象?请包括版本。谢谢。现在,如果您执行一个“新建查询”=>“选择@@VERSION”,它将返回大致如下的内容:“Microsoft SQL Server XXXX”。在你的例子中,XXXX是什么?我想找到子对象和它们的子对象,等等,直到我找到所有的子对象。正如安德拉斯所说,你可以通过递归查询和CTE来实现这一点。()哦,我刚刚意识到也许你不能更改表的模式。如果是这样,那么这个答案是无用的。但如果你可以,这是一个有趣的选择。谢谢你,这帮了大忙。我现在明白递归SQL了,谢谢。
DECLARE @Table TABLE(
        ID INT,
        Val VARCHAR(10),
        ParentID INT
)

INSERT INTO @Table SELECT 1, 'A', NULL
INSERT INTO @Table SELECT 2, 'B', NULL
INSERT INTO @Table SELECT 3, 'C', 1
INSERT INTO @Table SELECT 4, 'D', 1
INSERT INTO @Table SELECT 5, 'E', 4
INSERT INTO @Table SELECT 5, 'F', 2

;WITh Parents AS (
    SELECT  *,
            CAST(Val + '/'  AS VARCHAR(100))PathVal
    FROm    @Table
    WHERE   ParentID IS NULL
    UNION ALL
    SELECT  t.*,
            CAST(p.PathVal + t.Val + '/' AS VARCHAR(100))
    FROM    @Table t INNER JOIN 
            Parents p ON t.ParentID = p.ID
)
SELECT  *
FROM    Parents