Sql server 如何使用具有多个子节点的sql将表数据转换为xml格式

Sql server 如何使用具有多个子节点的sql将表数据转换为xml格式,sql-server,xml,tsql,Sql Server,Xml,Tsql,我的表格结构如下: SELECT [EmpID], [EmpName], [DeptName], [BirthDate] FROM [dbo].[Employees] 我想将此表数据转换为XML,最终输出如下: <Employees> <Department DeptName="ABC"> <Employee EmpID="1"> <EmpName>Davol

我的表格结构如下:

SELECT  
    [EmpID], [EmpName],
    [DeptName],
    [BirthDate] 
FROM
    [dbo].[Employees]
我想将此表数据转换为XML,最终输出如下:

<Employees>
    <Department DeptName="ABC"> 
        <Employee EmpID="1">
            <EmpName>Davolio</EmpName>
            <BirthDate>10/12/1989</BirthDate>
        </Employee>
        <Employee EmpID="2">
            <EmpName>Andrew</EmpName>    
            <BirthDate>05/02/1985</BirthDate>
        </Employee>
    </Department>
    <Department DeptName="DEF"> 
        <Employee EmpID="3">
            <EmpName>David</EmpName>
            <BirthDate>11/09/1982</BirthDate>
        </Employee> 
    </Department>`enter code here
</Employees>

达沃利奥
10/12/1989
安得烈
05/02/1985
大卫
11/09/1982
`在这里输入代码
试试这个

SELECT  [DeptName] 
        ,(  SELECT  [EmpID],
                    [EmpName],
                    [BirthDate] 
            FROM @table E
            WHERE   E.DeptName = D.DeptName
            FOR XML PATH ('Employee'),TYPE
        )
FROM    @table D
GROUP BY [DEPTNAME]
FOR XML PATH ('Department'),type,ROOT('Employees')

@saiv一个小提示:如果您想将
DeptName
EmpID
作为属性(如给定示例中所示),则必须分别将别名
添加为[@DeptName]
<代码>作为[@EmpID]。请注意,XML将使用ISO8601,因此日期看起来像1982-09-11T00:00:00