?
Solved

How to get OpenXML to process all nodes within parent node

Posted on 2008-10-02
2
Medium Priority
?
527 Views
Last Modified: 2013-11-05
Hi there
I pass an XML string to my stored procedure with the following format:
<Root>
<Scheme ref='someref''>
<Payment>
<FundName>Fund1</FundName>
<Amount>0</Amount>
</Payment>
<Payment>
<FundName>Fund2</FundName>
<Amount>0</Amount>
</Payment>
.....
</Scheme>
<Scheme ref='anotherref'>
.....
</Scheme>
</Root>

In my stpred procedure I need to load this XML into a table with the following format:

CREATE TABLE #TempSchemes([Scheme] varchar(100) ,
                      [FundName] varchar(30) ,
                      [Amount] varchar(18))

My OpenXML statement look slike this:

EXEC sp_xml_preparedocument @nXmlHandle output, @SchemeData

INSERT INTO #TempSchemeData([Scheme], [FundName], [Amount])
SELECT xScheme, xFundName, xAmount
FROM OPENXML (@nXmlHandle, '/Root/Scheme',1)  
WITH (xScheme varchar(20) './@ref',
xFundName varchar(30) './Payment/FundName',
xAmount varchar(18) './Payment/Amount')

SELECT @nErr = @@Error, @nRowCnt = @@Rowcount
 IF(@nErr <> 0)
 BEGIN
         SELECT @nRetVal = 1  
         EXEC sp_xml_removedocument @nXmlHandle
         GOTO ERR_HANDLER
END              

THis works without error but all I am getting in my table is the FundName and Amount from my very first
<Payment> tag for each scheme when what I want is for it to load every <payment> item and give it the scheme ref of the enclosing <Scheme> tag.

Any ideas much appreciated.

Cheers
Sam
EXEC sp_xml_removedocument @nXmlHandle
        
0
Comment
Question by:Samm1502
2 Comments
 
LVL 24

Accepted Solution

by:
Snarf0001 earned 2000 total points
ID: 22624086
Try this one:

select xScheme, xFundName, xAmount
from openxml(@idoc, 'Root/Scheme/Payment', 1)
with (
      xScheme varchar(20) '../@ref',
      xFundName varchar(30) 'FundName',
      xAmount varchar(18) 'Amount'
)
0
 

Author Closing Comment

by:Samm1502
ID: 31502330
Thanks!
0

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Ready to get certified? Check out some courses that help you prepare for third-party exams.
One of the most important things in an application is the query performance. This article intends to give you good tips to improve the performance of your queries.
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

589 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question