2009-10-14 27 views
8

Tôi có truy vấn sử dụng for xml explit để trả lại kết quả XML.Tên cột kết quả XML của TSQL "cho xml rõ ràng"?

chọn ... từ ... trật tự bởi [BatchType! 1! TypeName], [FormType 2! TypeName!], Tag, phụ huynh cho xml rõ ràng, root ('ClientImages')

nhưng tên của tên cột kết quả là một cái gì đó như khó hiểu như

alt text

có cách nào để thay đổi tên cột?


[ĐÁP] tôi đã có một vài lồng WITH báo cáo vì vậy tôi đã tiết kiệm được là kết quả của truy vấn mà không áp dụng FOR XML EXPLICIT vào một bảng temp @xmlTable và sau đó thiết lập các XML kết quả rõ ràng để một XML sau đó trở về nó .

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

select @xmlResult as XmlResult 
+1

bạn đang sử dụng phiên bản SQL Server nào ?? Vào năm 2005 trở lên, chắc chắn không còn cần phải "FOR XML EXPLICIT" - FOR XML PATH dễ sử dụng hơn và tốt hơn nhiều –

+0

SQL Server 2005/2008 – Sung

+0

@marc_s: Tôi có cấu trúc phức tạp mà tôi không thể đại diện cho việc sử dụng FOR XML PATH. – Sung

Trả lời

7

Không, không, theo như tôi biết. SQL Server Management Studio sẽ tự động phát sinh tên như vậy cho XML của bạn.

Bạn có thể có thể gán đầu ra của bạn để một biến XML đầu tiên và sau đó chọn rằng để có được một "nice" tên cột:

DECLARE @XmlResult XML 

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


SELECT @XmlResult 

nhưng khác hơn thế, tôi không biết cách nào ảnh hưởng đến tên của cột do SSMS tạo ra.

Marc

+1

Thay vì tái cấu trúc câu lệnh 'WITH', tôi chỉ đưa kết quả (không áp dụng' FOR XML EXPLIT') vào bảng tạm thời và sau đó trả về nó dưới dạng XML từ bảng tạm thời - Trả lời được cập nhật. – Sung

17

- thêm một lựa chọn (đầu tiên) và loại (ở cuối dòng), và như [một cái gì đó]

 

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



0

Nếu bạn cần không gian tên trong xml trở của bạn:

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

Bạn cũng có thể sử dụng tiền tố không gian tên NS0 trong phụ cũng được chọn.

Các vấn đề liên quan