sql >> データベース >  >> RDS >> Sqlserver

同じ要素名のFORXMLパ​​スT-SQLクエリで属性を複数回使用する

    ショートカットメソッドはこれのためにそれをカットしないかもしれません。 AUTOとPATHは、同じ名前の複数の要素を好みません。 XMLEXPLICITの場合 を使用する必要があるようです。 コマンド。

    動作しますが、面倒です。

    サンプル:

    --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
    

    XMLを生成します

    <Taxonomy>
      <Category Level="1">Clothing</Category>
      <Category Level="2">Jeans</Category>
    </Taxonomy>
    

    編集:列が逆になりました。ジーンズのレベルはもうありません。



    1. ASCIISTR(N'str')に相当するOracle PLSQL

    2. PL/SQLを使用してPDFレポートを作成する方法

    3. ROLLBACK TRANSACTION 要求に対応する BEGIN TRANSACTION がありません

    4. MySQL-インデックスを作成するのにどのくらいかかりますか?