Search code examples
sql-servert-sqlsql-server-2005sqlxml

Key Value Pair XML (SQL Server 2005)


I am currently using this:

SELECT Column1, Column2
FROM SomeTable 
FOR XML PATH(''), ROOT('KeyValuePairs')

to produce this:

<KeyValuePairs>
<Column1>ColumValue1</Column1>
<Column2>ColumValue1</Column2>
</KeyValuePairs>

is there a way to produce something more descriptive like this:

<KeyValuePairs>
<KeyValuePair><Key>Column1</Key><Value>ColumValue1</Value></KeyValuePair>
<KeyValuePair><Key>Column2</Key><Value>ColumValue2</Value></KeyValuePair>
</KeyValuePairs>

Solution

  • SELECT (
           SELECT 'Column1' AS [Key],
                  T.Column1 AS Value
           FOR XML PATH('KeyValuePair'), TYPE
           ),
           (
           SELECT 'Column2' AS [Key],
                  T.Column2 AS Value
           FOR XML PATH('KeyValuePair'), TYPE
           )
    FROM SomeTable AS T
    FOR XML PATH('KeyValuePairs')
    

    Alternative:

    SELECT  'Column1' AS [KeyValuePair/Key],
            T.Column1 AS [KeyValuePair/Value],
            NULL,
            'Column2' AS [KeyValuePair/Key],
            T.Column2 AS [KeyValuePair/Value]
    FROM SomeTable AS T
    FOR XML PATH('KeyValuePairs')