문제

다음과 같은 구조의 테이블이 있습니다.

------------------------------
LocationID     | AccountNumber
------------------------------
long-guid-here | 12345
long-guid-here | 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 지금은 크리스 레온으로부터.

도움이 되었습니까?

해결책

노력하다

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

정말 죄송 해요!당신이 요구한 것을 섞었습니다.나는 유지 관리의 용이성 때문에 XML AUTO를 선호하지만 둘 중 하나가 효과적이라고 생각합니다.감독에 대해 사과드립니다 ;-)

SQL Server 2005(또는 아마도 2008)를 사용하면 XML Explicit보다 SQL을 훨씬 쉽게 유지 관리할 수 있는 XML PATH를 발견했습니다(특히 SQL이 더 긴 경우).

이 경우:

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

나는 그것을 얻었다:

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')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top