13

I have a table with a structure like the following:


LocationID AccountNumber
long-guid-here 12345
long-guid-here 54321

To pass into another stored procedure, I need the XML to look like this:

<root> 
    <clientID>12345</clientID>
    <clientID>54321</clientID>
</root>

The best I've been able to do so far was getting it like this:

<root clientID="10705"/>

I'm using this SQL statement:

SELECT
    1 as tag,
    null as parent,
    AccountNumber as 'root!1!clientID'
FROM
    Location.LocationMDAccount
WHERE
    locationid = 'long-guid-here'
FOR XML EXPLICIT

So far, I've looked at the documentation on the MSDN page, but I've not come out with the desired results.


@KG,

Yours gave me this output actually:

<root>
  <Location.LocationMDAccount>
    <clientId>10705</clientId>
  </Location.LocationMDAccount>
</root>

I'm going to stick with the FOR XML EXPLICIT from Chris Leon for now.

eshirvana
  • 23,227
  • 3
  • 22
  • 38
Chris Benard
  • 3,167
  • 2
  • 29
  • 35

5 Answers5

3

try

SELECT
    1 AS Tag,
    0 AS Parent,
    AccountNumber AS [Root!1!AccountNumber!element]
FROM
    Location.LocationMDAccount
WHERE
    LocationID = 'long-guid-here'
FOR XML EXPLICIT
manman
  • 4,743
  • 3
  • 30
  • 42
Chris Leon
  • 411
  • 4
  • 5
0

Using SQL Server 2005 (or presumably 2008) I find for XML PATH to allow for much easier to maintain SQL than for XML Explicit (particularly once the SQL is longer).

In this case:

SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');
jeffreypriebe
  • 2,267
  • 25
  • 30
0

Try this, Chris:

SELECT
    AccountNumber as [clientId]
FROM
    Location.Location root
WHERE
    LocationId = 'long-guid-here'
FOR
    XML AUTO, ELEMENTS

TERRIBLY SORRY! I mixed up what you were asking for. I prefer the XML AUTO just for ease of maintainance, but I believe either one is effective. My apologies for the oversight ;-)

karlgrz
  • 14,485
  • 12
  • 47
  • 58
0

I got it with:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
Rais Alam
  • 6,970
  • 12
  • 53
  • 84
Chris Benard
  • 3,167
  • 2
  • 29
  • 35
0
SELECT 1             as tag,
       null          as parent,
       AccountNumber as 'clientID!1!!element'
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML EXPLICIT, root('root')
Markus Safar
  • 6,324
  • 5
  • 28
  • 44
Asher
  • 1,016
  • 1
  • 6
  • 20