Here's an example of how to use the OpenXml function to create rowsets from the XML. I copied the account so that it shows a second account. Note that the XML you gave in your example is not well formed, there are mismatched closing tags for some of the elements.DECLARE @idoc intdeclare @doc varchar(8000)set @doc ='<?xml version="1.0"?><PLACEMENTS><FILE_NAME>somefile.xml</FILE_NAME><CREATED>01/01/2006 </CREATED><ACCOUNTS><ACCOUNT><TYPE>Some Type Or other</TYPE><ACCOUNT_NO>9999</ACCOUNT_NO><BALANCE>9.76</BALANCE><PRODUCTS><PRODUCT><TYPE>NORMAL</TYPE> <START_DATE>10/12/2003</START_DATE><END_DATE>23/01/2006</END_DATE><REFERENCE>d/4534535</REFERENCE><PAYMENT><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY></PAYMENT> </PRODUCT><PRODUCT><TYPE>NORMAL</TYPE> <START_DATE>10/12/2003</START_DATE><END_DATE>23/01/2006</END_DATE><REFERENCE>d/4534535</REFERENCE><PAYMENT><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY></PAYMENT></PRODUCT></PRODUCTS><HISTORY><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL></HISTORY></ACCOUNT><ACCOUNT><TYPE>Another</TYPE><ACCOUNT_NO>8888</ACCOUNT_NO><BALANCE>9.76</BALANCE><PRODUCTS><PRODUCT><TYPE>NORMAL</TYPE> <START_DATE>10/12/2003</START_DATE><END_DATE>23/01/2006</END_DATE><REFERENCE>d/4534535</REFERENCE><PAYMENT><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY></PAYMENT> </PRODUCT><PRODUCT><TYPE>NORMAL</TYPE> <START_DATE>10/12/2003</START_DATE><END_DATE>23/01/2006</END_DATE><REFERENCE>d/4534535</REFERENCE><PAYMENT><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY><PAY><PDATE>23/01/2004</PDATE><PTYPE>Routine</PTYPE><VALUE>2248</VALUE></PAY></PAYMENT></PRODUCT></PRODUCTS><HISTORY><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL><BILL><BDATE>10/02/1999</BDATE><BTYPE>STANDARD</BTYPE><BILL_TOTAL>35.61</BILL_TOTAL><BALANCE>31.76</BALANCE></BILL></HISTORY></ACCOUNT></ACCOUNTS></PLACEMENTS>'--Create an internal representation of the XML document.EXEC sp_xml_preparedocument @idoc OUTPUT, @doc-- Execute a SELECT statement that uses the OPENXML rowset provider.SELECT *FROM OPENXML (@idoc, '/PLACEMENTS/ACCOUNTS/ACCOUNT',1) WITH (AccountType varchar(40) 'TYPE', AccountNo varchar(40) 'ACCOUNT_NO')SELECT *FROM OPENXML (@idoc, '/PLACEMENTS/ACCOUNTS/ACCOUNT/PRODUCTS/PRODUCT',1) WITH (AccountNo varchar(40) '../../ACCOUNT_NO', REFERENCE varchar(40) 'REFERENCE')EXEC sp_xml_removedocument @idoc