Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Sql server 2005 使用CTE递归SQL Server 2005访问其他节点信息_Sql Server 2005_Recursion_Timeout_Common Table Expression - Fatal编程技术网

Sql server 2005 使用CTE递归SQL Server 2005访问其他节点信息

Sql server 2005 使用CTE递归SQL Server 2005访问其他节点信息,sql-server-2005,recursion,timeout,common-table-expression,Sql Server 2005,Recursion,Timeout,Common Table Expression,背景表格数据: memberid sponsorid mailfirstname maillastname 1000 NULL Foo Chu 1001 1000 Foo1 Chu1 1002 1001 Foo2 Chu2 1003 1002 Foo3 Chu3 1004 1003 Foo4 Chu4 下面的脚本打

背景表格数据:

memberid sponsorid mailfirstname maillastname
1000     NULL      Foo           Chu
1001     1000      Foo1          Chu1
1002     1001      Foo2          Chu2
1003     1002      Foo3          Chu3
1004     1003      Foo4          Chu4
下面的脚本打印出我当前所在的成员。但我同时还想打印该成员的赞助商信息。因此,目前我得到:

Level memberid sponsorid mailfirstname maillastname
0     1000     NULL      Foo           Chu
...
2     1004     1003      Foo4          Chu4
但对于1004会员,我也希望他们的赞助商:

Level memberid sponsorid mailfirstname maillastname sponsorfname sponsorlname
2     1004     1003      Foo4          Chu4         Foo3         Chu3
查询:

WITH Heirarchy
AS
(
   SELECT 
      CONVERT( INT , 0 ) [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname
   FROM
      members T1
   WHERE
      T1.memberid = 20000283

   UNION ALL

   SELECT 
      CONVERT( INT , ( TH.[Level] + 1 ) ) [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname
   FROM
      members T1
   INNER JOIN 
      Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT * 
FROM Heirarchy 
ORDER BY level, maillastname
它应该对你有帮助

在下面的脚本中,我检索所有成员及其赞助商

WITH Heirarchy
AS
(
   SELECT 
      0 AS [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname,
      T1.mailfirstname AS sponsorfname,
      T1.maillastname AS sponsorlname
   FROM
      members T1
   WHERE
      T1.sponsorid IS NULL
   UNION ALL
   SELECT
      TH.[Level] + 1 AS [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname,
      TH.mailfirstname,
      TH.maillastname
   FROM
      members T1
   INNER JOIN 
      Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT * 
FROM Heirarchy
ORDER BY level, maillastname
演示

这是一个
层次结构
(而不是
继承权
)…您将“赞助商”信息存储在哪里?您只需要连接到该特定表,然后选择要在查询结果中显示的列