Какой выход вы хотите получить?это что-то вроде этого:
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