2009-10-14 8 views
8

J'ai une requête qui utilise for xml explit pour retourner le résultat XML.Nom colonne de résultat XML de TSQL "pour xml explicite"?

select ... de ... commande par [BatchType! 1! TypeName], [FormType! 2! TypeName], Tag, Parent pour XML explicite, racine ('clientImages')

mais le nom du nom de colonne résultante est quelque chose d'aussi cryptique que

alt text

est-il un moyen de changer le nom de la colonne?


[REPONSE] j'ai eu plusieurs emboîtés WITH déclarations, donc je l'ai sauvé le résultat de la requête sans appliquer FOR XML EXPLICIT dans une table temporaire @xmlTable puis définissez le XML résultat EXPLICITE à un XML est ensuite retourné il .

declare @xmlResult xml 
set @xmlResult =( 
    select * 
    from @xmlTable 
    for xml explicit, root('ClientImages')) 

select @xmlResult as XmlResult 
+1

quelle version de SQL Server utilisez-vous? En 2005 et plus, il n'y a plus besoin de "FOR XML EXPLICIT" - FOR XML PATH est beaucoup plus facile à utiliser et beaucoup mieux –

+0

SQL Server 2005/2008 – Sung

+0

@marc_s: J'ai une structure compliquée pour laquelle je ne pouvais pas représenter en utilisant FOR CHEMIN XML. – Sung

Répondre

7

Non, il n'y a pas, pour autant que je sache. SQL Server Management Studio générera automatiquement un tel nom pour votre fichier XML.

Vous pourriez être en mesure d'affecter votre sortie à une variable XML d'abord, puis sélectionnez que pour obtenir un nom de colonne « agréable »:

DECLARE @XmlResult XML 

SELECT @XmlResult = ...... 
    FROM ....... 


SELECT @XmlResult 

mais à part ça, je ne suis pas au courant d'aucune façon pour influencer le nom de la colonne générée par SSMS.

Marc

+1

Au lieu de restructurer les instructions 'WITH', je viens de mettre le résultat (sans appliquer' FOR XML EXPLIT') dans une table temporaire, puis de le renvoyer simplement en XML depuis la table temporaire - Réponse mise à jour. – Sung

17

- ajouter une sélection (premier) et le type (à la fin), et comme [quelque chose]

 

select 
    ( 
    select 1 as tag, 
    null  as parent, 
    'algo'  as [nodo!1!attr] 
    for xml explicit, type 
    ) as [MyDesiredName] 



0

Si vous avez besoin namespaces dans votre xml retourné:

WITH XMLNAMESPACES ('urn:http://YourNamespaceHere' as NS0) 
SELECT (...) AS XmlResult 

Vous pouvez également utiliser le préfixe d'espace de noms NS0 dans la sous-sélection.

Questions connexes