2008-08-05 5 views
8

J'ai une table avec une structure comme ce qui suit:SQL Server 2005 Pour XML EXPLICIT - Besoin d'aide formatage

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

Pour passer dans une autre procédure stockée, j'ai besoin du XML pour ressembler à ceci:

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

Le meilleur que je suis en mesure de le faire à ce jour devenais comme ceci:

<root clientID="10705"/> 

J'utilise ce SQL s ECLARATION:

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

Jusqu'à présent, j'ai regardé la documentation sur the MSDN page, mais je suis venu pas avec les résultats souhaités.


@KG,

vôtre m'a donné cette sortie fait:

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

Je vais en tenir à la FOR XML EXPLICIT de Chris Leon pour l'instant.

Répondre

1

essayer

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

Essayez ce, Chris:

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

navré! J'ai mélangé ce que vous demandiez. Je préfère le XML AUTO juste pour la facilité de maintenance, mais je crois que l'un est efficace. Je présente mes excuses pour la surveillance ;-)

0

je suis arrivé avec:

select 
1 as tag, 
null as parent, 
AccountNumber as 'root!1!clientID!element' 
from 
Location.LocationMDAccount 
where 
locationid = 'long-guid-here' 
for xml explicit 
0

Utilisation de SQL Server 2005 (ou probablement 2008) Je trouve PATH XML pour permettre beaucoup plus facile de maintenir SQL que pour XML EXPLICIT (en particulier une fois que le SQL est plus long).

Dans ce cas:

SELECT AccountNumber as "clientID" 
FROM Location.LocationMDAccount 
WHERE locationid = 'long-guid-here' 
FOR XML PATH (''), Root ('root'); 
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')