如何使用DISTINCT子句为XML格式的MSSQL SELECT查询添加唯一ID



我想创建一个简单的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')

最新更新