Предполагая, что ваш XML находится в переменной с типом XML, вы можете попробовать это:
DECLARE @xml XML=
N'<ContactsGET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<data>
<Datum>
<Owner>
<name>dilip.nair</name>
<id>3565223000000178021</id>
</Owner>
<Email xsi:type="xsd:string">mail2vembu@mail.com</Email>
<Full_Name>Sridhar Vembu</Full_Name>
<name>Abcon Group</name>
<id>3565223000000206007</id>
</Datum>
<Datum>
<Owner>
<name>dilip.nair</name>
<id>3565223000000178021</id>
</Owner>
<Email xsi:type="xsd:string">mail2vembu@mail.com</Email>
<Full_Name>Sridhar Vembu</Full_Name>
<name>Abcon Group</name>
<id>3565223000000206007</id>
</Datum>
</data>
<info>
<per_page>200</per_page>
<count>200</count>
<page>1</page>
<more_records>true</more_records>
</info>
</ContactsGET>'
- запрос выберет значения <info>
непосредственно из XML, как кажется, когда-топо XML.Значения в пределах <data>
выбираются .nodes()
, но на один уровень глубже, чем вы сами пробовали (повторяющийся элемент - <Datum>
):
SELECT @xml.value('(/ContactsGET/info/per_page/text())[1]','int') Info_PerPage
,@xml.value('(/ContactsGET/info/count/text())[1]','int') Info_Count
,@xml.value('(/ContactsGET/info/page/text())[1]','int') Info_Page
,@xml.value('(/ContactsGET/info/more_records/text())[1]','bit') Info_MoreRecords
,dat.value('(Owner/name/text())[1]','nvarchar(max)') Owner_name
,dat.value('(Owner/id/text())[1]','nvarchar(max)') Owner_id
,dat.value('(Email/text())[1]','nvarchar(max)') eMail
,dat.value('(Full_Name/text())[1]','nvarchar(max)') Full_Name
,dat.value('(name/text())[1]','nvarchar(max)') [Name]
,dat.value('(id/text())[1]','nvarchar(max)') id
FROM @xml.nodes('/ContactsGET/data/Datum') A(dat);