I have an XML stored in this format. When I use the below code it only returns NULL. Is there anything I am missing here?? Thanks in advance.
Declare @xmlData xml;
set @xmlData =
'<ProcessTask ProcessFile="Process1" TaskID="MyTsk" URL="www.google.com">
<LinkParams UserId="007" CountryId="1" Email="james.bond@gmail.com;" EmailSubject="New Mission" EndDate="2022-01-01" />
</ProcessTask>'
SELECT
n.value('(./UserId/text())[1]','int') as ArchiveUserId
, n.value('(./Email/text())[1]','Varchar(500)') as Email
FROM @xmlData.nodes('/ProcessTask/LinkParams') as a(n)
The required data is in attributes. That's why .value()
method's XPath expressions should reflect it.
SQL
Declare @xmlData XML =
N'<ProcessTask ProcessFile="Process1" TaskID="MyTsk" URL="www.google.com">
<LinkParams UserId="007" CountryId="1" Email="james.bond@gmail.com;"
EmailSubject="New Mission" EndDate="2022-01-01"/>
</ProcessTask>';
SELECT n.value('@UserId','INT') as ArchiveUserId
, n.value('@Email','VARCHAR(500)') as Email
FROM @xmlData.nodes('/ProcessTask/LinkParams') as a(n);
Output
+---------------+-----------------------+
| ArchiveUserId | Email |
+---------------+-----------------------+
| 7 | james.bond@gmail.com; |
+---------------+-----------------------+