2010-06-15 29 views
0

Nous venons tout juste de passer aux synonymes pour le serveur lié, et nous avons remarqué que notre sortie FOR XML n'est plus correcte. Lorsque vous renvoyez des résultats XML à partir d'une vue, nous pouvons alias la vue et celle-ci est affectée en tant que nom d'élément. Avec des synonymes, cependant, il semble ignorer l'alias? Nous sommes encore la plupart du temps sur SQL 2005 - ce bug ne semble pas se produire sur notre instance de 2008. Est-ce un problème connu, et des idées de solutions de rechange?Utilisation de FOR XML AUTO avec un synonyme

Par exemple, voici ce que nous avons utilisé pour être en mesure de le faire:

select top 3 number from Numbers as elementname for xml auto 

<elementname number="0"/><elementname number="1"/><elementname number="2"/> 

Et voici ce qui se passe avec un synonyme:

select top 3 number from Numbers_synonym as elementname for xml auto 

<dbo.Numbers number="0"/><dbo.Numbers number="1"/><dbo.Numbers number="2"/> 

Comme vous pouvez le voir, SQL Server semble utilise le nom de l'objet référencé réel au lieu de l'alias. Cela devient pire pour les requêtes multi-serveurs, car vous obtenez le nom en quatre parties au lieu de l'alias sympa. (Par exemple: <rick_server.rick_database.dbo.Numbers number="0"/> ...)

Répondre

1

Parfois FOR XML AUTO-ce que la « mauvaise chose » - vous pouvez contrôler le nom de l'élément XML si vous utilisez le plus bavard fractionnairement:

SELECT TOP 3 number 
FROM Numbers_synonym 
FOR XML PATH('elementname'), TYPE 
+0

Je ne travaille pas à cette société plus (cette question a 7 mois), donc je ne peux pas le vérifier directement. Comment utiliser XML PATH() avec une sélection multi-tables (par exemple: deux synonymes internes)? Avec les tables aliasées, les alias sont utilisés comme noms d'éléments imbriqués. Comment XML PATH pourrait-il résoudre quel chemin appliquer à quel synonyme? – Rick

+1

@Rick Dépend de votre requête - vous pourriez utiliser une requête corrélée avec une clause 'FOR XML PATH', ce qui le permettrait. –