Como posso fazer com que o Sql Server 2K8 R2 retorne esse xml sem recorrer ao modo de compatibilidade
-
27-09-2019 - |
Pergunta
Estamos no processo de atualização de nosso servidor sql para 2K8 R2 e a saída de uma consulta FOR XML AUTO foi alterada.
A consulta gera colunas de três tabelas
O conjunto de resultados retorna três linhas em que cada coluna é idêntica, exceto as duas últimas colunas da terceira tabela.os resultados usados para mostrar como abaixo
<element1 myval="Test">
<element2 myotherval="atest">
<element3 a="a"/>
<element3 a="b"/>
<element3 a="c" />
</element2>
</element1>
não mostra
<element1 myval="Test">
<element2 myotherval="atest">
<element3 a="a"/>
</element2>
</element1>
<element1 myval="Test">
<element2 myotherval="atest">
<element3 a="B"/>
</element2>
</element1>
<element1 myval="Test">
<element2 myotherval="atest">
<element3 a="C"/>
</element2>
</element1>
Tenho tentado usar For XML Path, mas ele ainda retorna 3 instâncias separadas de element1 em vez de agrupar os dados.
Solução
Se você quiser uma subárvore usando FOR XML PATH, você terá que escrever subconsultas para cada subárvore.Portanto, no seu caso, você tem uma instrução select pai para o elemento1, e uma das colunas é uma subconsulta que obtém o que precisa estar no elemento2 (que por sua vez também pode ser subconsultas).Se você usar subconsultas e quiser que o XML seja retornado delas, use
PARA CAMINHO XML('elementoN'), TIPO
ou escapará do código XML.