FOR XML EXPLICIT - 需要一种智能的方式来查询XML

时间:2014-11-17 08:18:25

标签: sql-server xml

我想从数据库中的单个表创建一个复杂的XML结构。我设法添加了5个不同的节点,如下所示:

SELECT 1 AS Tag
,NULL AS Parent
,NULL AS [Document-OrderResponse!1]
,NULL AS [OrderResponse-Header!2]
,NULL AS [OrderResponseType!3]
,NULL AS [OrderResponseNumber!4]
,NULL AS [OrderResponseDate!5]
,NULL AS [OrderNumber!6]
,NULL AS [DocumentFunctionCode!7]
,NULL AS [DetailsOfTransport!8]
,NULL AS [TermsOfDelivery!9]

UNION ALL

SELECT 2 AS Tag
    ,1 AS Parent
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL

UNION ALL

SELECT 3 AS Tag
    ,2 AS Parent
    ,NULL
    ,NULL
    ,'Type'
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL

UNION ALL

SELECT 4 AS Tag
    ,2 AS Parent
    ,NULL
    ,NULL
    ,NULL
    ,'Number'
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,NULL

UNION ALL

SELECT 5 AS Tag
    ,2 AS Parent
    ,NULL
    ,NULL
    ,NULL
    ,NULL
    ,'Date'
    ,NULL
    ,NULL
    ,NULL
    ,NULL
FOR XML explicit

最终文档将嵌套更多,并且将会有大约15个值。如果我继续构建这样的查询,它将是几页长。帮我重新创建它。

结果如下(没有换行符和缩进):

<Document-OrderResponse>
    <OrderResponse-Header>
        <OrderResponseType>Type</OrderResponseType>
        <OrderResponseNumber>Number</OrderResponseNumber>
        <OrderResponseDate>Date</OrderResponseDate>
    </OrderResponse-Header>
</Document-OrderResponse>

1 个答案:

答案 0 :(得分:1)

尝试使用FOR XML PATH()。

您的查询可能如下所示:

select T.OrderResponseType,
       T.OrderResponseNumber,
       T.OrderResponseDate
from YourTable as T
for xml path('OrderResponse-Header'), root('Document-OrderResponse')