Solved

How to get OpenXML to process all nodes within parent node

Posted on 2008-10-02
2
468 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 22

Accepted Solution

by:
Snarf0001 earned 500 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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Everyone has problem when going to load data into Data warehouse (EDW). They all need to confirm that data quality is good but they don't no how to proceed. Microsoft has provided new task within SSIS 2008 called "Data Profiler Task". It solve th…
Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
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.

746 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now