Using attribute more than once in FOR XML Path T-SQL query with same element name

后端 未结 3 797
臣服心动
臣服心动 2021-01-26 18:41

I am trying to create an xml output in SQL 2008 using FOR XML Path. This is working fine:


      Clothing         


        
3条回答
  •  一个人的身影
    2021-01-26 19:09

    The shortcut methods may not cut it for this. AUTO and PATH don't like multiple elements with the same name. Looks like you would have to use the FOR XML EXPLICIT command.

    It works, but is cumbersome.

    Sample:

    --Generate Sample Data
    --FOR XML EXPLICIT requires two meta fields: Tag and Parent
    --Tag is the ID of the current element.
    --Parent is the ID of the parent element, or NULL for root element.
    
    DECLARE @DataTable as table
       (Tag int NOT NULL
       , Parent int
       , TaxonomyValue nvarchar(max)
       , CategoryValue nvarchar(max)
       , CategoryLevel int)
    
    --Fill with sample data: Category Element (2), under Taxonomy(1), with no Taxonomy value.
    INSERT INTO @DataTable
    VALUES (2, 1, NULL, 1, 'Clothing')
         , (2, 1, NULL, 2, 'Jeans')
    
    --First part of query: Define the XML structure
    SELECT
       1 as Tag  --root element
       , NULL as Parent
       , NULL as [Taxonomy!1]       --Assign Taxonomy Element to the first element, aka root.
       , NULL as [Category!2]       --Assign Category Element as a child to Taxonomy.
       , NULL as [Category!2!Level] --Give Category an Attribute 'Level'
    
    --The actual data to fill the XML
    UNION
    SELECT
       Data.Tag
       , Data.Parent
       , Data.TaxonomyValue
       , Data.CategoryValue
       , Data.CategoryLevel
    FROM
       @DataTable as Data
    FOR XML EXPLICIT
    

    Generates XML

    
      Clothing
      Jeans
    
    

    Edit: Had columns reversed. No more Jeans level.

提交回复
热议问题