Mediante FOR XML AUTO contra un sinónimo
-
27-09-2019 - |
Pregunta
Hemos acaba de cambiar a sinónimos de cosas servidor vinculado, y se dio cuenta de que nuestra salida para XML ya no es correcta. Al devolver resultados XML desde un punto de vista, podríamos asignar un alias a la vista y que sería asignado como el nombre del elemento. Con sinónimos, sin embargo, parece ignorar el alias? Todavía estamos sobre todo en SQL 2005 - no parece de este error a suceder en nuestro ejemplo 2008. ¿Es un problema conocido, y algunas ideas para soluciones temporales?
Por ejemplo, esto es lo que solía ser capaz de hacer:
select top 3 number from Numbers as elementname for xml auto
<elementname number="0"/><elementname number="1"/><elementname number="2"/>
Y esto es lo que sucede con un 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 se puede ver, SQL Server parece usar el nombre del objeto real que se hace referencia en lugar del alias. Esto empeora para las peticiones al servidor transversales, debido a que obtiene el nombre de cuatro partes en lugar del alias agradable. (Por ejemplo: <rick_server.rick_database.dbo.Numbers number="0"/>
...)
Solución
A veces FOR XML AUTO
hace la "cosa incorrecta" - se puede controlar el nombre del elemento XML si utiliza el fraccionadamente más detallada:
SELECT TOP 3 number
FROM Numbers_synonym
FOR XML PATH('elementname'), TYPE