XML 명시적용 SQL Server 2005 - 형식 지정에 도움이 필요함
-
08-06-2019 - |
문제
다음과 같은 구조의 테이블이 있습니다.
------------------------------
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')
제휴하지 않습니다 StackOverflow