Usando para o XML Auto contra um sinônimo
-
27-09-2019 - |
Pergunta
Acabamos de mudar para sinônimos para coisas do servidor vinculado e notamos que nossa saída para XML não está mais correta. Ao retornar os resultados do XML de uma visualização, poderíamos alias a visualização e isso seria atribuído como o nome do elemento. Com sinônimos, no entanto, parece ignorar o pseudônimo? Ainda estamos principalmente no SQL 2005 - esse bug não parece acontecer em nossa instância de 2008. Isso é um problema conhecido e alguma idéia para as atividades de trabalho?
Por exemplo, é isso que costumávamos fazer:
select top 3 number from Numbers as elementname for xml auto
<elementname number="0"/><elementname number="1"/><elementname number="2"/>
E é isso que acontece com um sinônimo:
select top 3 number from Numbers_synonym as elementname for xml auto
<dbo.Numbers number="0"/><dbo.Numbers number="1"/><dbo.Numbers number="2"/>
Como você pode ver, o SQL Server parece usar o nome do objeto referenciado real em vez do alias. Isso piora para as consultas do servidor cruzado, porque você obtém o nome de quatro partes em vez do bom pseudônimo. (por exemplo: <rick_server.rick_database.dbo.Numbers number="0"/>
...)
Solução
As vezes FOR XML AUTO
Faz a "coisa errada" - você pode controlar o nome do elemento XML se usar o fracionalmente mais detalhado:
SELECT TOP 3 number
FROM Numbers_synonym
FOR XML PATH('elementname'), TYPE