2009-10-14 19 views
8

Ho una query che utilizza for xml explit per restituire il risultato XML.Nome colonna del risultato XML di TSQL "per xml esplicito"?

select ... da ... ORDER BY [BatchType! 1! TypeName], [FormType! 2! TypeName], Tag, Genitori per xml esplicita, radice ('ClientImages')

ma il nome di nome di colonna risultante è qualcosa di criptico come

alt text

c'è un modo per cambiare il nome della colonna?


[RISPOSTA] ho avuto una diversi nidificato WITH dichiarazioni così ho salvato il risultato della query senza applicare FOR XML EXPLICIT in una tabella temporanea @xmlTable e quindi impostare il codice XML risultato esplicito a un XML poi restituito .

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

select @xmlResult as XmlResult 
+1

quale versione di SQL Server stai usando ?? Nel 2005 e oltre, non c'è più bisogno di "FOR XML EXPLICIT" - PER IL PERCORSO XML è molto più facile da usare e molto meglio –

+0

SQL Server 2005/2008 – Sung

+0

@marc_s: Ho una struttura complicata per la quale non potrei rappresentare usando FOR PERCORSO XML. – Sung

risposta

7

No, non c'è, per quanto ne so. SQL Server Management Studio genererà automaticamente un nome simile per il tuo XML.

Potreste essere in grado di assegnare l'output ad una variabile XML e poi selezionare che per ottenere una "bella" nome di colonna:

DECLARE @XmlResult XML 

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


SELECT @XmlResult 

ma a parte questo, io non sono a conoscenza di alcun modo influenzare il nome della colonna generata da SSMS.

Marc

+1

Invece di ristrutturare le istruzioni 'WITH', ho inserito il risultato (senza applicare' FOR XML EXPLIT') in una tabella temporanea e poi semplicemente lo ho restituito come XML dalla tabella temporanea - Risposta aggiornata. – Sung

17

- aggiungere una selezione tipo (primo) e (alla fine), e come [qualcosa]

 

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



0

Se avete bisogno di spazi dei nomi nella vostra XML restituito:

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

È inoltre possibile utilizzare il prefisso dello spazio dei nomi NS0 anche nella selezione secondaria.

Problemi correlati