SQL Server 2005 für explizites XML - Benötigen Sie Hilfe bei der Formatierung?

Translate

Ich habe eine Tabelle mit einer Struktur wie der folgenden:

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

Um in eine andere gespeicherte Prozedur zu gelangen, muss das XML folgendermaßen aussehen:

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

Das Beste, was ich bisher tun konnte, war, es so zu bekommen:

<root clientID="10705"/>

Ich verwende diese SQL-Anweisung:

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

Bisher habe ich mir die Dokumentation angeschautdie MSDN-Seite, aber ich bin nicht mit den gewünschten Ergebnissen herausgekommen.


@KG,

Ihre gab mir diese Ausgabe tatsächlich:

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

Ich werde bei der bleibenFOR XML EXPLICITvon Chris Leon für jetzt.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Versuchen

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

Versuchen Sie das, Chris:

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

SCHRECKLICH LEID! Ich habe verwechselt, wonach Sie gefragt haben. Ich bevorzuge das XML AUTO nur aus Gründen der Wartungsfreundlichkeit, aber ich glaube, dass eines davon effektiv ist. Ich entschuldige mich für das Versehen ;-)

Quelle
Translate

Mit SQL Server 2005 (oder vermutlich 2008) finde ich, dass XML PATH die Wartung von SQL viel einfacher macht als XML Explicit (insbesondere wenn SQL länger ist).

In diesem Fall:

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

Ich habe es mit:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
Quelle
Translate
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')
Quelle