やりたいこと
DBからSELECTしてきたデータでXMLデータを作成したい。
FOR JSON AUTOのようにやればいける?
作りたい形↓
<AAA>
<BBB>
<CCC>
<DDD>20220804</DDD>
<EEE>朝</EEE>
<FFF>
<GGG>
<HHH>コメ</HHH>
<III>味噌汁</III>
<JJJ>焼き魚</JJJ>
</GGG>
</FFF>
</CCC>
<CCC>
<DDD>20220804</DDD>
<EEE>夜</EEE>
<FFF>
<GGG>
<HHH>うどん</HHH>
<III>かつ丼</III>
<JJJ>漬物</JJJ>
</GGG>
</FFF>
</CCC>
</BBB>
</AAA>
結論
DECLARE @Date nvarchar(8) = '20220804'
DECLARE @MealTbl TABLE (
mealTime nvarchar(1),
dish1 nvarchar(10),
dish2 nvarchar(10),
dish3 nvarchar(10)
)
-- データ挿入
INSERT INTO @MealTbl
VALUES('朝','コメ','味噌汁','焼き魚')
INSERT INTO @MealTbl
VALUES('夜','うどん','かつ丼','漬物')
SELECT
(
SELECT
@Date as DDD,
CCC.mealTime as EEE,
(
SELECT
GGG.dish1 as HHH,
GGG.dish2 as III,
GGG.dish3 as JJJ
FROM @MealTbl GGG
WHERE GGG.mealTime = CCC.mealTime
FOR XML AUTO, ELEMENTS, TYPE -- ELEMENTSで要素と認識する、TYPEでXML型にする
) FFF
FROM @MealTbl CCC
GROUP BY mealTime
FOR XML AUTO, ELEMENTS, TYPE
)
FOR XML PATH('BBB'), ROOT('AAA') --rootはトップレベル要素
実現できました。
リファレンス