SQL Server 2005 для явного XML - нужна помощь в форматировании

У меня есть таблица со следующей структурой:


LocationID Номер счета
длинный гид-здесь 12345
длинный гид-здесь 54321

Чтобы перейти в другую хранимую процедуру, мне нужно, чтобы XML выглядел так:

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

Лучшее, что мне удалось сделать до сих пор, было получить это так:

<root clientID="10705"/>

Я использую этот оператор SQL:

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

До сих пор я просматривал документацию на странице MSDN , но не получил желаемых результатов.


@КГ,

На самом деле вы дали мне такой результат:

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

Я собираюсь FOR XML EXPLICIT пока придерживаться от Криса Леона.

Ответов (5)

Решение

пытаться

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

Получил с помощью:

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
    AccountNumber as [clientId]
FROM
    Location.Location root
WHERE
    LocationId = 'long-guid-here'
FOR
    XML AUTO, ELEMENTS

МНЕ ОЧЕНЬ ЖАЛЬ! Я перепутал то, о чем вы просили. Я предпочитаю XML AUTO только для простоты обслуживания, но считаю, что любой из них эффективен. Мои извинения за недосмотр ;-)

ВЫБЕРИТЕ 1 как тег,
       null как родитель,
       AccountNumber как 'clientID! 1 !! element'
ОТ Location.LocationMDAccount
ГДЕ locationid = 'длинный гид-здесь'
FOR XML EXPLICIT, root ('корень')

Используя SQL Server 2005 (или, предположительно, 2008), я обнаружил, что XML PATH позволяет намного проще поддерживать SQL, чем для XML Explicit (особенно, когда SQL длиннее).

В этом случае:

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