3

次のクエリがあります。

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>

Table and Column Alias メソッドを使用してみました:

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)

ただし、このクエリは、単一の XMLFormat フィールドに XML 全体を含む単一行のデータを生成します。

.nodes() メソッドを使用する必要があるかもしれないと思ったのですが、.nodes('/Students/Student') を t(c) エイリアスに追加すると、'.' の近くに不正な構文が表示されます。

テキストが非常に長くなる可能性があるため、.nodes() メソッドを使用する前にデータを XML 変数に入れないようにしたいと考えています。

4

1 に答える 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
于 2013-09-04T18:08:14.793 に答える