2009-10-14 11 views
8

Mam kwerendę, która używa for xml explit do zwracania wyniku XML.Nazwa kolumny wyniku XML TSQL "dla xml jawnie"?

wybierz ... od ... zamówienie przez [BatchType! 1! TypeName], [FormType! 2! TypeName], Tag, nadrzędna XML wyraźnej, korzeń ('ClientImages')

ale nazwa powstałego nazwy kolumny jest coś tak tajemnicze jak

alt text

Czy istnieje sposób, aby zmienić nazwę kolumny?


[ODPOWIEDŹ] miałem kilka zagnieżdżonych WITH wypowiedzi tak mam zapisane wynik zapytania bez stosowania FOR XML EXPLICIT do tabeli temp @xmlTable a następnie ustawić wynik EXPLICIT XML do XML po czym wrócił go .

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

select @xmlResult as XmlResult 
+1

jakiej wersji programu SQL Server używasz? W 2005 i później, zdecydowanie nie ma już potrzeby "FOR XML EXPLICIT" - DLA XML PATH jest znacznie łatwiejszy w użyciu i znacznie lepszy –

+0

SQL Server 2005/2008 – Sung

+0

@marc_s: Mam skomplikowaną strukturę, dla której nie mogłem reprezentować za pomocą FOR XML PATH. – Sung

Odpowiedz

7

Nie, nie istnieje, o ile wiem. SQL Server Management Studio automatycznie wygeneruje taką nazwę dla Twojego XML.

Możesz być w stanie przypisać wyjście do zmiennej XML, a następnie zaznaczyć, że aby dostać się „dobre” imię kolumna:

DECLARE @XmlResult XML 

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


SELECT @XmlResult 

ale poza tym, nie jestem świadomy jakikolwiek sposób wpływać na nazwę kolumny generowanej przez SSMS.

Marc

+1

Zamiast restrukturyzacji instrukcji 'WITH', po prostu umieszczam wynik (bez stosowania' FOR XML EXPLIT') do tabeli temp, a następnie po prostu zwracam go jako XML z tabeli temp - Odpowiedź została zaktualizowana. – Sung

17

- dodaj wybrać (pierwszy) i typ (na koniec) i jako [coś]

 

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



0

Jeśli potrzebujesz nazw w swojej zwróconej XML:

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

Możesz również użyć prefiksu przestrzeni nazw NS0 w wyborze podrzędnym.

Powiązane problemy