Search code examples
sqlsql-serverxmlxquery

XML to SQL Server table/column returning NULL


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)

Solution

  • 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; |
    +---------------+-----------------------+