将FOR XML PATH的结果拆分成单独的行

4
我有以下查询:
SELECT
    101 AS TeacherID
    ,s.ID
    ,s.First
    ,s.Last
FROM dbo.Students s
FOR XML PATH('Student'), ROOT('Students')

它生成输出的代码是:

<Students>
  <Student>
    <TeacherID>101</TeacherID>
    <ID>14</ID>
    <First>Mark</First>
    <Last>Smith</Last>
  </Student>
  <Student>
    <TeacherID>101</TeacherID>
    <ID>15</ID>
    <First>Josephina</First>
    <Last>Hewitt</Last>
  </Student>
</Students>

我希望将每个组拆分为单独的行(放入一个名为XMLFormat的列中):
AdministratorID   AdministratorName   XMLFormat
------------------------------------------------------------------------------------------------------------------------------------
125               Bertha              <Student><TeacherID>101</TeacherID><ID>14</ID><First>Mark</First><Last>Smith</Last></Student>
125               Bertha              <Student><TeacherID>101</TeacherID><ID>15</ID><First>Josephina</First><Last>Hewitt</Last></Student>

我尝试使用表和列别名的方法:

SELECT  125 AS AdministratorID,
        'Bertha' AS AdministratorName,
        t.c AS XMLFormat
FROM 
(   
    SELECT
        101 AS TeacherID
        ,s.ID
        ,s.First
        ,s.Last
    FROM dbo.Students s
    FOR XML PATH('Student'), ROOT('Students')
) t(c)

但是这个查询只生成一行数据,整个XML都在单个的XMLFormat字段中。
我认为我可能需要使用.nodes()方法,但是当我将.nodes('/Students/Student')添加到t(c)别名时,会出现“附近有语法错误”的提示。
我想避免在使用.nodes()方法之前将数据放入XML变量中,因为文本可能非常长。
1个回答

2
select
    125 as AdministratorID,
    'Bertha' as AdministratorName,
    (
        select
            101 as TeacherID, s.ID, s.First, s.Last
        for xml path('Student'), type
    ) as XMLFormat
from dbo.Students s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接