1

I have xml column in a table and I want to parse the xml and insert the values into new table

How to insert the xml values into table?

CREATE TABLE [dbo].[PubmedMeshDescriptors](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PMID] [int] NULL,
    [Descriptor] [nvarchar](400) NULL,
    [DescriptorIsMajor] [char](1) NULL,
    [Qualifier] [nvarchar](400) NULL,
    [QualifierIsMajor] [char](1) NULL
)

and the xml column in another table looks like this

<MedlineCitation Owner="NLM" Status="MEDLINE">
  <PMID Version="1">1</PMID>
  <MeshHeadingList>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Aldehyde Oxidoreductases</DescriptorName>
      <QualifierName MajorTopicYN="N">metabolism</QualifierName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Animals</DescriptorName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Carbon Dioxide</DescriptorName>
      <QualifierName MajorTopicYN="N">blood</QualifierName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Formates</DescriptorName>
      <QualifierName MajorTopicYN="N">blood</QualifierName>
      <QualifierName MajorTopicYN="Y">poisoning</QualifierName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Haplorhini</DescriptorName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Hydrogen-Ion Concentration</DescriptorName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Methanol</DescriptorName>
      <QualifierName MajorTopicYN="N">blood</QualifierName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Methods</DescriptorName>
    </MeshHeading>
    <MeshHeading>
      <DescriptorName MajorTopicYN="N">Pseudomonas</DescriptorName>
      <QualifierName MajorTopicYN="N">enzymology</QualifierName>
    </MeshHeading>
  </MeshHeadingList>
</MedlineCitation>

how can I do that using sql query?

1 Answer 1

2

Put the xml into an xml variable and try something like this:

INSERT PubmedMeshDescriptors (PMID, Descriptor, DescriptorIsMajor, Qualifier, QualifierIsMajor)
SELECT 
    PMIDNode.value('.', 'int') as PMID,
    DescriptorNode.value('.', 'nvarchar(400)') as Descriptor,
    DescriptorNode.value('(./@MajorTopicYN)[1]', 'char(1)') as DescriptorIsMajor,
    QualifierNode.value('.', 'nvarchar(400)') as Qualifier,
    QualifierNode.value('(./@MajorTopicYN)[1]', 'char(1)') as QualifierIsMajor
FROM @xml.nodes('/MedlineCitation') AS citation(citationNode)
CROSS APPLY 
    citationNode.nodes('./PMID')
    AS PMID(PMIDNode)
CROSS APPLY 
    citationNode.nodes('./MeshHeadingList/MeshHeading')
    AS MeshHeading(MeshHeadingNode)
OUTER APPLY 
    MeshHeadingNode.nodes('./DescriptorName')
    AS Descriptor(DescriptorNode)
OUTER APPLY 
    MeshHeadingNode.nodes('./QualifierName')
    AS Qualifier(QualifierNode)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.