SQL Server 2005 para XML explícito: necesita ayuda para formatear
-
08-06-2019 - |
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.
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')