Solved

How to get OpenXML to process all nodes within parent node

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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Rebooting Witness SQL Server 2 23
Convert VBA UDF to SQl SERVER UDF 4 46
Need help with a query 14 32
SQL- GROUP BY 4 21
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
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…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…

679 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