MS SQL 的递归函数
Recursive Function for MS SQL
我需要编写一个递归函数来从 table B
中获取引用并合并到 table A
中的一个字段中。
Table答:
ID Name Reference
1 Item A
2 Item B
3 Item C
Table乙:
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
我在这里没有看到任何递归:
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
我需要编写一个递归函数来从 table B
中获取引用并合并到 table A
中的一个字段中。
Table答:
ID Name Reference
1 Item A
2 Item B
3 Item C
Table乙:
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
我在这里没有看到任何递归:
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