2009-10-14 7 views
8

Ich habe eine Abfrage, die for xml explit verwendet, um XML-Ergebnis zurückzugeben.Name XML Ergebnis Spalte von TSQL "für XML explizit"?

wählen ... von ... order by [BatchType! 1! Type-Name], [Formtype! 2! Type-Name], Tag, Eltern für xml explizit, root ('client')

aber der Name der resultierenden Spaltenname ist etwas so kryptisch wie

alt text

gibt es eine Möglichkeit, die Spaltennamen zu ändern?


[ANTWORT] hatte ich mehrere WITH Aussagen verschachtelt, damit ich das Ergebnis der Abfrage gespeichert haben, ohne FOR XML EXPLICIT in eine temporäre Tabelle @xmlTable Anwendung und stellen Sie dann das explizites Ergebnis XML ein XML es dann zurück .

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

select @xmlResult as XmlResult 
+1

welche Version von SQL Server verwenden Sie? Seit 2005 und mehr gibt es definitiv keine Notwendigkeit mehr für "FOR XML EXPLICIT" - FÜR XML PATH ist viel einfacher zu bedienen und viel besser –

+0

SQL Server 2005/2008 – Sung

+0

@ marc_s: Ich habe komplizierte Struktur, für die ich FOR nicht darstellen könnte XML-Pfad – Sung

Antwort

7

Nein, es gibt nicht, soweit ich weiß. SQL Server Management Studio generiert automatisch einen solchen Namen für Ihr XML.

Möglicherweise können Sie die Ausgabe in ein XML-Variablen zuweisen und dann wählen, dass ein „netten“ Spaltennamen zu erhalten:

DECLARE @XmlResult XML 

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


SELECT @XmlResult 

aber anders als das, ich bin mir nicht bewusst irgendeine Weise um den Namen der von SSMS erzeugten Spalte zu beeinflussen.

Marc

+1

Anstatt 'WITH'-Anweisungen zu restrukturieren, lege ich das Ergebnis (ohne' FOR XML EXPLIT') in eine temporäre Tabelle und gebe es dann einfach als XML aus der temporären Tabelle zurück - Antwort aktualisiert. – Sung

17

- fügen Sie einen select (erste) und Typ (am Ende), und als [etwas]

 

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



0

Wenn Sie Namespaces in Ihrem zurückgegeben xml müssen:

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

Sie können das NS0-Namespacepräfix auch in der Unterauswahl verwenden.