LoginSignup
0
1

More than 1 year has passed since last update.

SQL ServerのFOR XMLでXMLを作る

Posted at

やりたいこと

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はトップレベル要素

実現できました。

リファレンス

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1