declare @cxml varchar(8000) select @cxml='<?xml version="1.0" ?> <VOYCALLS> <Call> <VisitNo>6</VisitNo> <VisitAt>SGSIN</VisitAt> <PortName>SINGAPORE</PortName> <Eta>200512202200</Eta> <Etb>200512202300</Etb> <Etd>200512211424</Etd> <Ata>200512202200</Ata> <Atb>200512210024</Atb> <Atd>200512220200</Atd> </Call> <Call> <VisitNo>7</VisitNo> <VisitAt>CNSHA</VisitAt> <PortName>SHANGHAI</PortName> <Eta>200512270900</Eta> <Etb>200512280800</Etb> <Etd>200512290100</Etd> <Ata>null</Ata> <Atb>null</Atb> <Atd>null</Atd> </Call> </VOYCALLS> ' exec SP_readXML @cxmlSP_readXML:
CREATE PROCEDURE SP_readXML ( @xml text ) as declare @xdoc int exec sp_xml_preparedocument @xdoc output, @xml select t.* into #call from openxml (@xdoc, '/VOYCALLS/Call', 2) with(VisitNo varchar(5), VisitAt varchar(5), PortName varchar(35), Eta varchar(12), Etb varchar(12), Etd varchar(12), Ata varchar(12), Atb varchar(12), Atd varchar(12) ) as t exec sp_xml_removedocument @xdoc select left(ata,2) as test_str from #call GO