我想创建一个简单的MSSQL SELECT
查询并对其进行格式化,以便创建XML文档。
我可以用以下方式简单地格式化XML:
SELECT
'<UNB_TIERART uuid="MY_UNIQUE_ID" > <TIERKLASSE>'
GRUPPE
+'</TIERKLASSE> </UNB_TIERART>'
FROM [MAPAGENT].[dbo].[ARTEN]
是否有一种方法将MY_UNIQUE_ID
替换为变量,例如每个条目增加一的数字?
如果您想创建xml文档,为什么不完全在SQL Server中使用以下FOR xml语法呢?
看看这个解决方案:
SELECT
ROW_NUMBER() OVER (ORDER BY Gruppe) AS '@uuid',
GRUPPE AS 'TIERKLASSE'
FROM (VALUES('G1'), ('G2')) T(Gruppe) [MAPAGENT].[dbo].[ARTEN]
FOR XML PATH('UNB_TIERART')
如果您还需要一个根(完整的XML),只需附加root("根名称"),如下所示:
SELECT
ROW_NUMBER() OVER (ORDER BY Gruppe) AS '@uuid',
GRUPPE AS 'TIERKLASSE'
FROM (VALUES('G1'), ('G2')) T(Gruppe) --YOUR TABLE
FOR XML PATH('UNB_TIERART'), ROOT('ROOT')
后者产生:
<ROOT>
<UNB_TIERART uuid="1">
<TIERKLASSE>G1</TIERKLASSE>
</UNB_TIERART>
<UNB_TIERART uuid="2">
<TIERKLASSE>G2</TIERKLASSE>
</UNB_TIERART>
</ROOT>
如果您需要不同的gruppe,请将不同应用于您的基本表:
SELECT
ROW_NUMBER() OVER (ORDER BY Gruppe) AS '@uuid',
GRUPPE AS 'TIERKLASSE'
FROM (
SELECT DISTINCT Gruppe FROM [YOUR TABLE]
) DistincResult
FOR XML PATH('UNB_TIERART'), ROOT('ROOT')
您可以使用FOR XML PATH
。
如下所示:
;WITH TestData(GRUPPE) AS
(
SELECT 'row1'
UNION ALL SELECT 'row2'
UNION ALL SELECT 'row3'
)
SELECT ROW_NUMBER()OVER(ORDER BY GRUPPE ASC) as '@uuid' ,GRUPPE as TIERKLASSE
FROM TestData
FOR XML PATH('UNB_TIERART')