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

SQLServerのXML値から要素名のリストを取得するにはどうすればよいですか

    これは、XQueryと再帰CTE(OPENXMLなし)を使用してクリーンに実行できます。 ):

    DECLARE @xml xml
    SET @xml = '<a><b /><c><d /><d /><d /></c></a>';
    
    WITH Xml_CTE AS
    (
        SELECT
            CAST('/' + node.value('fn:local-name(.)',
                'varchar(100)') AS varchar(100)) AS name,
            node.query('*') AS children
        FROM @xml.nodes('/*') AS roots(node)
    
        UNION ALL
    
        SELECT
            CAST(x.name + '/' + 
                node.value('fn:local-name(.)', 'varchar(100)') AS varchar(100)),
            node.query('*') AS children
        FROM Xml_CTE x
        CROSS APPLY x.children.nodes('*') AS child(node)
    )
    SELECT DISTINCT name
    FROM Xml_CTE
    OPTION (MAXRECURSION 1000)
    

    XQueryの魔法はあまり機能していませんが、少なくともすべてインラインであり、ストアドプロシージャや特別な権限などは必要ありません。



    1. PostgreSQLでのpg_sleep()のしくみ

    2. SQLServerのメッセージ529「データ型intからxmlへの明示的な変換は許可されていません」を修正しました

    3. Oracle FORLOOPSELECTステートメントの例

    4. VirtualboxVMのラップトップまたはデスクトップのBIOSで仮想化を有効にする