2012-02-16 46 views
8

Tôi đang cố gắng tạo ra một đầu ra XML từ SQL và cần phải sử dụng một câu lệnh UNION và cũng đặt tên cho cột đầu ra.ĐỐI TƯỢNG SQL CHO cột đầu ra tên XML

tôi đã làm việc này trước khi tôi không cần phải sử dụng một tuyên bố UNION sử dụng:

select(
SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAccs] FOR XML PATH ('AccountDetails'), root ('Root') 
) as XmlOutput 

Những tên cột đầu ra XML như XmlOutput

bây giờ tôi cố gắng:

select(
SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAccs] 

UNION 

SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAppAccs] 



FOR XML PATH ('AccountDetails'), root ('Root') 
) as XmlOutput 

Nhưng nhận được thông báo lỗi, có ai biết cách này không?

The FOR XML clause is invalid in views, inline functions, derived tables, and subqueries when they contain a set operator. To work around, wrap the SELECT containing a set operator using derived table syntax and apply FOR XML on top of it. 

Cảm ơn J.

+1

không được thông báo lỗi nói gì? – Mithrandir

+0

Thông báo lỗi ở trên ... cảm ơn – JBoom

Trả lời

15

quấn 2 Lựa chọn của bạn trên một duy nhất và sau đó làm:

select (
    select id, name from (
     select id, name 
     from xmltest 
     UNION 
     select id, name 
     from xmltest 
) A 
FOR XML PATH ('AccountDetails'), root ('Root') 
) As XmlOutput 
+0

Tôi không nhận được những gì bạn đang yêu cầu tôi thử. – JBoom

+0

Tôi nghĩ rằng bên cạnh thẻ UNION, xml chỉ được áp dụng cho truy vấn thứ hai (một điều phân tích cú pháp). Có thể nếu bạn chỉ định cả hai truy vấn là một truy vấn, nó sẽ hoạt động tại – Diego

+0

tại sao downvote? Tôi chỉ chạy một thử nghiệm và nó hoạt động hoàn hảo – Diego