MS SQL的递归函数

时间:2015-05-11 15:11:04

标签: sql sql-server database recursion recursive-query

我需要编写一个递归函数来获取table B的引用,并在table A的字段中合并。

表A:

ID   Name      Reference
1    Item A 
2    Item B 
3    Item C 

表B:

ID   Parent_ID   Reference
1    1           ABC
2    1           DEF
3    2           GHI

预期结果:

ID   Name      Reference
1    Item A     ABCDEF
2    Item B     GHI
3    Item C 

1 个答案:

答案 0 :(得分:1)

我在这里看不到任何递归:

DECLARE @a TABLE
    (
      ID INT ,
      Name VARCHAR(10) ,
      Reference VARCHAR(100)
    )
DECLARE @b TABLE
    (
      ID INT ,
      ParentID INT ,
      Reference VARCHAR(3)
    )

INSERT  INTO @a
VALUES  ( 1, 'Item A', NULL ),
        ( 2, 'Item B', NULL ),
        ( 3, 'Item C', NULL )

INSERT  INTO @b
VALUES  ( 1, 1, 'ABC' ),
        ( 2, 1, 'DEF' ),
        ( 3, 2, 'GHI' )


UPDATE  a
SET     Reference = ca.data
FROM    @a a
        CROSS APPLY ( SELECT    
                   (            SELECT  b.Reference
                                FROM    @b b
                                WHERE   a.ID = b.ParentID
                                ORDER BY ID
                      FOR       XML PATH('') ,
                                    TYPE
                   ).value('.', 'varchar(max)') AS DATA
                    ) ca

SELECT  *
FROM    @a

输出:

ID  Name    Reference
1   Item A  ABCDEF
2   Item B  GHI
3   Item C  NULL