Pregunta

Tengo una tabla con una estructura como la siguiente:

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

Para pasar a otro procedimiento almacenado, necesito que el XML tenga este aspecto:

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

Lo mejor que he podido hacer hasta ahora fue hacerlo así:

<root clientID="10705"/>

Estoy usando esta declaración SQL:

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

Hasta ahora, he mirado la documentación sobre la página de MSDN, pero no he obtenido los resultados deseados.


@KG,

El tuyo me dio este resultado en realidad:

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

voy a seguir con el FOR XML EXPLICIT de Chris Leon por ahora.

¿Fue útil?

Solución

intentar

SELECT
    1 AS Tag,
    0 AS Parent,
    AccountNumber AS [Root!1!AccountNumber!element]
FROM
    Location.LocationMDAccount
WHERE
    LocationID = 'long-guid-here'
FOR XML EXPLICIT

Otros consejos

Prueba esto, Chris:

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

¡LO SIENTO MUCHO!Confundí lo que me pedías.Prefiero XML AUTO sólo por facilitar el mantenimiento, pero creo que cualquiera de los dos es eficaz.Mis disculpas por el descuido ;-)

Al utilizar SQL Server 2005 (o presumiblemente 2008), encuentro que XML PATH permite mantener SQL mucho más fácilmente que XML Explicit (particularmente una vez que SQL es más largo).

En este caso:

SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');

Lo conseguí con:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
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')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top