0

Need Some Help.

Currently have 2 tables.

#head

PARAM1 PARAM2 PARAM3
------ ------ ------
AAA    BBB    CCC

and

#body

NAME                 SEX                  EMAIL
-------------------- -------------------- --------------------
Tania                Female               [email protected]
Sergey               male                 [email protected]

By using next query I am getting next result:

QUERY:

SELECT
        PARAM1,
        PARAM2,
        PARAM3,
        (SELECT
            NAME,
            SEX,
            EMAIL
        FROM #body
        FOR XML RAW('body'),ELEMENTS,TYPE
        ) AS bodyS
    FROM #head as HEAD
    FOR XML AUTO

Current Result:

<HEAD PARAM1="AAA" PARAM2="BBB" PARAM3="CCC">
  <bodyS>
    <body>
      <NAME>Tania</NAME>
      <SEX>Female</SEX>
      <EMAIL>[email protected]</EMAIL>
    </body>
    <body>
      <NAME>Sergey</NAME>
      <SEX>male</SEX>
      <EMAIL>[email protected]</EMAIL>
    </body>
  </bodyS>
</HEAD>

Expected result:

<HEAD PARAM1="AAA" PARAM2="BBB" PARAM3="CCC">
    <body>
      <NAME>Tania</NAME>
      <SEX>Female</SEX>
      <EMAIL>[email protected]</EMAIL>
    </body>
    <body>
      <NAME>Sergey</NAME>
      <SEX>male</SEX>
      <EMAIL>[email protected]</EMAIL>
    </body>
</HEAD>

Could somebody help Me to figure-out how can I reach expected result.

Thanks to everyone in advance for any help !

1 Answer 1

1

Using @ in the column name will create a attribute instead of element.
Use sub query with FOR XML PATH for creating "internal" elements from returned rows.

SELECT 
    'AAA' AS '@Param1'
    , 'BBB' AS '@Param2'
    , 'CCC' AS '@Param3'
    , (SELECT Name, Sex, Email FROM [yourTable] FOR XML PATH ('BODY'), TYPE)
FOR XML PATH ('HEAD')
Sign up to request clarification or add additional context in comments.

3 Comments

Ruery Result: <HEAD Param1="AAA" Param2="BBB" Param3="CCC">&lt;BODY&gt;&lt;Name&gt;Tania&lt;/Name&gt;&lt;Sex&gt;Female&lt;/Sex&gt;&lt;Email&gt;[email protected]&lt;/Email&gt;&lt;/BODY&gt;&lt;BODY&gt;&lt;Name&gt;Sergey&lt;/Name&gt;&lt;Sex&gt;male&lt;/Sex&gt;&lt;Email&gt;[email protected]&lt;/Email&gt;&lt;/BODY&gt;</HEAD> not really what I am looking for. But anyway, thanks.
@FirmackBendera, sorry the TYPE parameter was missed. Check updated query
Thanks A lot ! Works as expected ! =)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.