CTE and FOR XML to generate nested XML

前端 未结 3 1257
你的背包
你的背包 2020-12-16 01:22

I have an adjacency list in the DB and want to deliver the data in XML format to the client through a SQL SP. I\'m trying to use CTE and FOR XML but I am not getting the XM

3条回答
  •  失恋的感觉
    2020-12-16 01:56

    Turns out I didn't want the CTE at all, just a UDF that I call recursively

    CREATE FUNCTION PageHierarchyNode(@PageId int)
    RETURNS XML
    WITH RETURNS NULL ON NULL INPUT 
    BEGIN RETURN 
      (SELECT ModuleId AS "@ModuleId", PageId AS "@PageId",
        ParentPageId AS "@ParentPageId", PageUrl AS "@PageUrl",
        PageTitle AS "@PageTitle", PageOrder AS "@PageOrder", 
          CASE WHEN ParentPageId=@PageId
          THEN dbo.PageHierarchyNode(PageId)
          END
       FROM dbo.PageHierarchy WHERE ParentPageId=@PageId
       FOR XML PATH('Page'), TYPE)
    END
    

    with the SQL that calls the UDF as

    SELECT ModuleId AS "@ModuleId", PageId AS "@PageId",
        ParentPageId AS "@ParentPageId", PageUrl AS "@PageUrl",
        PageTitle AS "@PageTitle", PageOrder AS "@PageOrder", 
        dbo.PageHierarchyNode(PageId)
    FROM PageHierarchy
    WHERE ParentPageId IS NULL
    FOR XML PATH('Page'), ROOT('SiteMap'), TYPE
    

提交回复
热议问题