2010-01-27 51 views
3

我正尝试使用SQL 2008中的XML功能生成XML文档,但我遇到了文档需要两个节点具有相同名称的问题名称,但SQL Server会自动连接具有相同名称的任何节点。如何防止SQL Server连接具有相同名称的XML结果

例如:

<Location> 
    <Address>Some Street</Address> 
    <Address>Some other info</Address> 
</Location> 

问题是,当我试图通过执行SQL做到这一点下面我得到:

<Location> 
    <Address>Some StreetSome other info</Address> 
</Location> 

这里是我如何选择数据:

SELECT CustomerStreet1 AS 'location/address', 
     CustomerStreet2 AS 'location/address' 
    FROM Customers 
FOR XML PATH('Customer') 

虽然在两个地址字段之间选择了另一个节点,但是我正在寻找我需要的能够将两个地址节点保持在一起。

+0

输出结合列数据的原因是因为列别名是相同的。 – 2010-01-27 17:17:05

回答

3
WITH customers (id, CustomerStreet1, CustomerStreet2) AS 
     (
     SELECT 1, 'Some Street', 'Some other info' 
     UNION ALL 
     SELECT 2, 'Second Street', NULL 
     ) 
SELECT id, 
     (
     SELECT * 
     FROM (
       SELECT CustomerStreet1 AS Address 
       UNION ALL 
       SELECT CustomerStreet2 
       ) q 
     FOR XML PATH(''), TYPE 
     ) 
FROM customers 
FOR XML PATH('Customers') 
+0

谢谢,这正是我正在寻找的。 – Horn 2010-01-27 17:25:34