次のクエリがあります。
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 変数に入れないようにしたいと考えています。