使用SSIS或SQL将多个XML整理到单个XML中

时间:2018-05-23 02:56:59

标签: sql sql-server xml ssis

我有一张下面结构的表格。

Declare @YourTable Table ([ColA] int,[ColB] xml)

Insert Into @YourTable Values 
 (123,'<XMLData><ID>1</ID></XMLData>')
,(456,'<XMLData><ID>2</ID></XMLData>')
,(333,'<XMLData><ID>3</ID></XMLData>')

XML具有相同的结构。 现在我需要使用SSIS或SQL将ColumnB中的所有XML连接成单个XML。预期结果应为

<XMLData>
   <ID>1</ID>
   <ID>2</ID>
   <ID>3</ID>
</XMLData>

非常感谢任何帮助。

干杯!

2 个答案:

答案 0 :(得分:2)

示例

Declare @YourTable Table ([ColA] int,[ColB] xml)
Insert Into @YourTable Values 
 (123,'<XMLData><ID>1</ID></XMLData>')
,(456,'<XMLData><ID>2</ID></XMLData>')
,(333,'<XMLData><ID>3</ID></XMLData>')

Select [*] = [ColB].query('XMLData/*') 
 From @YourTable A
 For  XML Path(''), ROOT('XMLData')

<强>返回

<XMLData>
  <ID>1</ID>
  <ID>2</ID>
  <ID>3</ID>
</XMLData>

答案 1 :(得分:0)

假设您的表名是具有以下数据模型的TBL:

COLUMN_A |  COLUMN_B
  123    |    XML1
  456    |    XML2
  333    |    XML3

以下用于SQL Server

SELECT COLUMN_1, STRING_AGG(COLUMN_B, ', ') WITHIN GROUP (ORDER BY COLUMN_B) AS CONCATENATED_XML
FROM TBL GROUP BY COLUMN_1;

使用以下查询Oracle

SELECT COLUMN_1, LISTAGG(COLUMN_B, ‘’) WITHIN GROUP (ORDER BY COLUMN_B) AS CONCATENATED_XML FROM TBL GROUP BY COLUMN_1;