首页 > 解决方案 > 如果 XML 具有重复的同名子元素,SSIS 将插入空值

问题描述

如果 XML 具有重复的同名子元素,SSIS 会将空值插入 DB。

示例 XML:

<Tests>
<TestId> 1 </TestId>
<TestName> Test 1 </TestName>
<TestId> 2 </TestId>
<TestName> Test 2 </TestName>
<TestLocation> Country </TestLocation>
</Tests>

谢谢,

标签: sql-serverxmlssismsbi

解决方案


您希望获得的输出是什么?是这样的吗:

ElementName      Value
TestId           1 
TestName         Test 1 
TestId           2 
TestName         Test 2 
TestLocation     Country 

或者

TestId  TestName    TestLocation
 1      Test 2      Country 
 2      Test 1      NULL

请参见下面使用 T-SQL 从 XML 中提取数据的示例

DECLARE @T TABLE (x XML) 
DECLARE @Out TABLE (ElementName varchar(100), [Value] varchar(1000))
INSERT INTO @T VALUES
(
'<Tests>
<TestId> 1 </TestId>
<TestName> Test 1 </TestName>
<TestId> 2 </TestId>
<TestName> Test 2 </TestName>
<TestLocation> Country </TestLocation>
</Tests>'
)
INSERT INTO @Out
SELECT q.t.value('local-name(.)', 'varchar(100)') ElementName,  
       q.t.value ('.', 'varchar(1000)') [Value]

 FROM @T
    CROSS APPLY x.nodes ('/Tests/*') q(t)

SELECT * 
FROM @Out


SELECT [TestId], [TestName], [TestLocation]
FROM 
(
SELECT  ROW_NUMBER () OVER (PARTITION BY ElementName ORDER BY ElementName) Id , ElementName , [Value]
FROM @Out
) T 
    PIVOT 
        (
        MIN([value]) FOR ElementName in ([TestId], [TestName], [TestLocation])
        ) pv

推荐阅读