Here are some examples of what Visakh mentioned.The query plans seem to suggest that the OPENQUERY method is a lot more efficient.I have no experience of large volumes of XML data, so this may not be the case with a 300k file.OPENXML egDECLARE @idoc intDECLARE @xml xmlSET @xml ='<Circuits> <Circuit Name="101" Adrs="101" G="1T" Ofst="1" Micro="0" SvrID="0" ProcID="1621103984" PrgIndx="10" PrgStp="1" Mode="0" A="0.23" StpAH="341.8" V="0.0" Tmp="407.1" StpT="0" RunTime="1025" Comm="0" Tick="0" Pwr="True" MainC="" ES="100" TLeft="0" AccumAH="341.804" Alarm="0" ProcStart="1/26/2010 9:04:25 PM" ProcEnd="1/27/2010 2:07:54 PM" ProcInfo="" ProcFree="1/27/2010 2:31:50 PM" TIA="0" TIV="0" TIT="0" Cyc="0" AT="0" CR="0" TCR="0"> <Prg Name="292P" Indx="10" AcummAH="False"> <Stp ID="1" Cod="7" N2="20" T12="341.8" /> <Ext /> </Prg> <UData /> </Circuit> <Circuit Name="13B-06" Adrs="706" G="13B" Ofst="1" Micro="0" SvrID="0" ProcID="1566143250" PrgIndx="534" PrgStp="1" Mode="7" A="38.99" StpAH="1.9" V="19.7" Tmp="32.0" StpT="8" RunTime="8" Comm="0" Tick="3189" Pwr="True" MainC="" ES="100" TLeft="491.0146" AccumAH="1.87" Alarm="0" ProcStart="1/28/2010 3:45:39 AM" ProcEnd="12:00:00 AM" ProcInfo="" ProcFree="12:00:00 AM" TIA="0" TIV="0" TIT="0" Cyc="0" AT="0" CR="0" TCR="0"> <Prg Name="224PMPG" Indx="534" AcummAH="False"> <Stp ID="1" Cod="7" N2="39.1" T12="19.6" /> <Stp ID="2" Cod="7" N2="40" T12="243.3" /> <Stp ID="3" Cod="7" N2="39.1" T12="47" /> <Stp ID="4" Cod="7" N2="29.4" T12="13.1" /> <Ext /> </Prg> <UData /> </Circuit></Circuits>'EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlSELECT *FROM OPENXML (@idoc, '//Circuits/Circuit',1) WITH ( CircuitName varchar(10) '@Name' ,Adrs varchar(20) ,G varchar(20) ,Ofst varchar(20) ,Micro varchar(20) -- etc ) SELECT *FROM OPENXML (@idoc, '/Circuits/Circuit/Prg',1) WITH ( CircuitName varchar(20) '../@Name' ,PrgName varchar(20) '@Name' ,Indx int ,AcummAH varchar(20) ) SELECT *FROM OPENXML (@idoc, '/Circuits/Circuit/Prg/Stp',1) WITH ( CircuitName varchar(20) '../../@Name' ,PrgName varchar(20) '../@Name' ,StpID int '@ID' ,Cod int ,N2 decimal(6,1) ,T12 decimal(6,1) )
value() eg:DECLARE @xml xmlSET @xml ='<Circuits> <Circuit Name="101" Adrs="101" G="1T" Ofst="1" Micro="0" SvrID="0" ProcID="1621103984" PrgIndx="10" PrgStp="1" Mode="0" A="0.23" StpAH="341.8" V="0.0" Tmp="407.1" StpT="0" RunTime="1025" Comm="0" Tick="0" Pwr="True" MainC="" ES="100" TLeft="0" AccumAH="341.804" Alarm="0" ProcStart="1/26/2010 9:04:25 PM" ProcEnd="1/27/2010 2:07:54 PM" ProcInfo="" ProcFree="1/27/2010 2:31:50 PM" TIA="0" TIV="0" TIT="0" Cyc="0" AT="0" CR="0" TCR="0"> <Prg Name="292P" Indx="10" AcummAH="False"> <Stp ID="1" Cod="7" N2="20" T12="341.8" /> <Ext /> </Prg> <UData /> </Circuit> <Circuit Name="13B-06" Adrs="706" G="13B" Ofst="1" Micro="0" SvrID="0" ProcID="1566143250" PrgIndx="534" PrgStp="1" Mode="7" A="38.99" StpAH="1.9" V="19.7" Tmp="32.0" StpT="8" RunTime="8" Comm="0" Tick="3189" Pwr="True" MainC="" ES="100" TLeft="491.0146" AccumAH="1.87" Alarm="0" ProcStart="1/28/2010 3:45:39 AM" ProcEnd="12:00:00 AM" ProcInfo="" ProcFree="12:00:00 AM" TIA="0" TIV="0" TIT="0" Cyc="0" AT="0" CR="0" TCR="0"> <Prg Name="224PMPG" Indx="534" AcummAH="False"> <Stp ID="1" Cod="7" N2="39.1" T12="19.6" /> <Stp ID="2" Cod="7" N2="40" T12="243.3" /> <Stp ID="3" Cod="7" N2="39.1" T12="47" /> <Stp ID="4" Cod="7" N2="29.4" T12="13.1" /> <Ext /> </Prg> <UData /> </Circuit></Circuits>'SELECT R.value('@Name[1]', 'varchar(20)') As CircuitName ,R.value('@Adrs[1]', 'varchar(20)') As Adrs ,R.value('@G[1]', 'varchar(20)') As G ,R.value('@Ofst[1]', 'varchar(20)') As Ofst ,R.value('@Micro[1]', 'varchar(20)') As Micro -- etcFROM @xml.nodes('/Circuits/Circuit') R(R)SELECT R.value('../@Name[1]', 'varchar(20)') As CircuitName ,R.value('@Name[1]', 'varchar(20)') As PrgName ,R.value('@Indx[1]', 'int') As Indx ,R.value('@AcummAH[1]', 'varchar(20)') As AcummAHFROM @xml.nodes('/Circuits/Circuit/Prg') R(R)SELECT R.value('../../@Name[1]', 'varchar(20)') As CircuitName ,R.value('../@Name[1]', 'varchar(20)') As PrgName ,R.value('@ID[1]', 'int') As StpID ,R.value('@Cod[1]', 'int') As Cod ,R.value('@N2[1]', 'decimal(6,1)') As N2 ,R.value('@T12[1]', 'decimal(6,1)') As T12FROM @xml.nodes('/Circuits/Circuit/Prg/Stp') R(R)