Службы SSIS вставляют нулевые значения, если в XML есть повторяющиеся дочерние элементы с тем же именем - PullRequest
0 голосов
/ 26 сентября 2018

Служба SSIS вставляет нулевые значения в БД, если в XML есть повторяющиеся дочерние элементы с тем же именем.

Образец XML:

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

Спасибо,

1 Ответ

0 голосов
/ 26 сентября 2018

Какой выход вы хотите получить?это что-то вроде этого:

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
...