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

时间:2016-07-29 09:39:46

标签: sql sql-server xml

我想创建一个简单的MSSQL SELECT查询并对其进行格式化以创建XML文档。

我可以通过以下方式简化XML的格式化:

SELECT  

'<UNB_TIERART uuid="MY_UNIQUE_ID" > <TIERKLASSE>' 

GRUPPE

+'</TIERKLASSE> </UNB_TIERART>'

FROM [MAPAGENT].[dbo].[ARTEN]

是否有方法用变量替换MY_UNIQUE_ID,例如每个条目增加1的数字?

2 个答案:

答案 0 :(得分:0)

您可以使用FOR XML PATH

如下所示:

var b = new ArrayBuffer(2);

b[0] = 1;
b[1] = 23234322442;

答案 1 :(得分:0)

如果要创建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')

如果您还需要root(完整XML),只需添加ROOT(&#39; root name&#39;),如下所示:

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,请将distinct应用于您的基表:

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')