Solved

Loop through data in SQL Server store proc

Posted on 2008-06-18
3
954 Views
Last Modified: 2012-05-05
Below is a proc that I have. after executing it I get 2 rows of XML. I want to loop through each row and perform some tasks on it. How can I loop through different rows in SQL server store proc
DECLARE @docHandle int

EXEC sp_xml_preparedocument @docHandle OUTPUT, 

'<ClauseGroup>

		<GroupID>1</GroupID>

		<GroupName>Test Group</GroupName>

		<EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>

		<ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>

		<DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>

	 <Clauses>

	  <Clause>

	   <ClauseID>0</ClauseID>

	   <ClauseGroupID>2</ClauseGroupID>

	   <EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>

	   <ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>

	   <DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>

	   <Description></Description>

	  <Operation>

	   <Code>BET</Code>

	  </Operation>

	  <Attribute>

	   <AttributeID>2</AttributeID>

	  </Attribute>

	  <Values>

	   <Value>

	     <value>Test4</value>

	   </Value>

	   <Value>

	     <value>Test5</value>

	   </Value>

	  </Values>

	  </Clause>

	  <Clause>

	   <ClauseID>1</ClauseID>

	   <ClauseGroupID>2</ClauseGroupID>

	   <EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>

	   <ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>

	   <DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>

	   <Description>test</Description>

	  <Operation>

	   <Code>IN</Code>

	  </Operation>

	  <Attribute>

	   <AttributeID>3</AttributeID>

	  </Attribute>

	  <Values>

	   <Value>

	     <value>Test6</value>

	   </Value>

	   <Value>

	     <value>Test7</value>

	   </Value>

	  </Values>

	  </Clause>	

	 </Clauses>

	</ClauseGroup>'
 

Select * 

FROM OPENXML(@docHandle, 'ClauseGroup/Clauses/Clause', 1) 

WITH (Data xml '.')

Open in new window

0
Comment
Question by:pratikshahse
  • 2
3 Comments
 
LVL 60

Expert Comment

by:chapmandew
ID: 21812061
Use a cursor to do the looping:

DECLARE  CursorTemplate CURSOR
FAST_FORWARD FOR       
      SELECT Val1, Val2, Val3 FROM Table1

OPEN CursorTemplate

FETCH NEXT FROM CursorTemplate
INTO      @Var1, @Var2, @Var3

WHILE (@@FETCH_STATUS = 0)
BEGIN
      --do something here w/ your data

      FETCH NEXT FROM CursorTemplate
      INTO      @Var1, @Var2, @Var3

END

CLOSE CursorTemplate
DEALLOCATE CursorTemplate
0
 

Author Comment

by:pratikshahse
ID: 21812156
i am kind of confused with this  statement. Can you please explain.

FAST_FORWARD FOR      
      SELECT Val1, Val2, Val3 FROM Table1  (I dont have to select anything from the table over here. The data is coming XML )





0
 
LVL 60

Accepted Solution

by:
chapmandew earned 500 total points
ID: 21812223
Right...you'd just swap in your SQL statement that pulls the XML data out...

ECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT,
'<ClauseGroup>
                <GroupID>1</GroupID>
                <GroupName>Test Group</GroupName>
                <EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>
                <ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>
                <DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>
         <Clauses>
          <Clause>
           <ClauseID>0</ClauseID>
           <ClauseGroupID>2</ClauseGroupID>
           <EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>
           <ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>
           <DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>
           <Description></Description>
          <Operation>
           <Code>BET</Code>
          </Operation>
          <Attribute>
           <AttributeID>2</AttributeID>
          </Attribute>
          <Values>
           <Value>
             <value>Test4</value>
           </Value>
           <Value>
             <value>Test5</value>
           </Value>
          </Values>
          </Clause>
          <Clause>
           <ClauseID>1</ClauseID>
           <ClauseGroupID>2</ClauseGroupID>
           <EffectiveDate>1/1/1900 12:00:00 AM</EffectiveDate>
           <ExpirationDate>1/1/1900 12:00:00 AM</ExpirationDate>
           <DeActivateDate>1/1/1900 12:00:00 AM</DeActivateDate>
           <Description>test</Description>
          <Operation>
           <Code>IN</Code>
          </Operation>
          <Attribute>
           <AttributeID>3</AttributeID>
          </Attribute>
          <Values>
           <Value>
             <value>Test6</value>
           </Value>
           <Value>
             <value>Test7</value>
           </Value>
          </Values>
          </Clause>    
         </Clauses>
        </ClauseGroup>'
 


DECLARE  CursorTemplate CURSOR
FAST_FORWARD FOR      
Select *
FROM OPENXML(@docHandle, 'ClauseGroup/Clauses/Clause', 1)
WITH (Data xml '.')

OPEN CursorTemplate

FETCH NEXT FROM CursorTemplate
INTO      @Var1, @Var2, @Var3

WHILE (@@FETCH_STATUS = 0)
BEGIN
      --do something here w/ your data

      FETCH NEXT FROM CursorTemplate
      INTO      @Var1, @Var2, @Var3

END

CLOSE CursorTemplate
DEALLOCATE CursorTemplate
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

by Mark Wills PIVOT is a great facility and solves many an EAV (Entity - Attribute - Value) type transformation where we need the information held as data within a column to become columns in their own right. Now, in some cases that is relatively…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

867 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

12 Experts available now in Live!

Get 1:1 Help Now