O SQL Server 2005 Para XML Explícita - Precisa de ajuda para formatação
-
08-06-2019 - |
Pergunta
Eu tenho uma tabela com uma estrutura como a seguinte:
------------------------------
LocationID | AccountNumber
------------------------------
long-guid-here | 12345
long-guid-here | 54321
Para passar para outro procedimento armazenado, eu preciso de XML para olhar como este:
<root>
<clientID>12345</clientID>
<clientID>54321</clientID>
</root>
O melhor que eu tenho sido capaz de fazer até agora foi ficando assim:
<root clientID="10705"/>
Eu estou usando esta instrução de SQL:
SELECT
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID'
FROM
Location.LocationMDAccount
WHERE
locationid = 'long-guid-here'
FOR XML EXPLICIT
Até agora, eu olhei a documentação em a página da MSDN, mas eu já não saiu com os resultados desejados.
@KG,
O seu me deu essa saída, na verdade:
<root>
<Location.LocationMDAccount>
<clientId>10705</clientId>
</Location.LocationMDAccount>
</root>
Eu estou indo para ficar com a FOR XML EXPLICIT
a partir de Chris, Leon, por agora.
Solução
tente
SELECT
1 AS Tag,
0 AS Parent,
AccountNumber AS [Root!1!AccountNumber!element]
FROM
Location.LocationMDAccount
WHERE
LocationID = 'long-guid-here'
FOR XML EXPLICIT
Outras dicas
Tente isso, Chris:
SELECT
AccountNumber as [clientId]
FROM
Location.Location root
WHERE
LocationId = 'long-guid-here'
FOR
XML AUTO, ELEMENTS
MUITO TRISTE!Eu misturei o que você estava pedindo.Eu prefiro o AUTO de XML apenas para facilidade de manutenção, mas acredito que qualquer um é eficaz.As minhas desculpas pela fiscalização ;-)
Usando o SQL Server 2005 (ou, presumivelmente, de 2008) eu encontrar para XML CAMINHO para permitir muito mais fácil de manter SQL que para XML Explícito (especialmente uma vez que o SQL é mais).
Neste caso:
SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');
Eu tenho-o com:
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')