CREATE TABLE ClientInfo( ID INT PRIMARY KEY IDENTITY, XMLInfo XML);INSERT INTO ClientInfo (XMLInfo)VALUES(N'<?xml version="1.0" ?><Root> <key>29</key> <children> <key>500</key> <children> <key>3000</key> <children> <key>70000</key> </children> </children> </children> <key>50</key> <children> <key>600</key> <children> <key>3600</key> <children> <key>9862</key> </children> <children> <key>9863</key> </children> <children> <key>9864</key> </children> </children> </children> <key>70</key> <children> <key>900</key> <children> <key>3700</key> <children> <key>7862</key> </children> <children> <key>6863</key> </children> <children> <key>5864</key> </children> </children> <children> <key>5400</key> <children> <key>7892</key> </children> <children> <key>6563</key> </children> <children> <key>5464</key> </children> </children> </children></Root>');select * from [dbo].[ClientInfo]SELECT aref.value('(key/text())[1]', 'varchar(50)') as Column1, bref.value('(key/text())[1]', 'varchar(50)') as Column2, cref.value('(key/text())[1]', 'varchar(50)') as Column3, dref.value('(key/text())[1]', 'varchar(50)') as Column4FROM ClientInfo CROSS APPLY XmlInfo.nodes('//Root') AS Level1(aref) CROSS APPLY aref.nodes('children') AS Level2(bref) CROSS APPLY bref.nodes('children') AS Level3(cref) CROSS APPLY cref.nodes('children') AS Level4(dref)GO
declare @ClientInfo xml =N'<?xml version="1.0" ?><Root> <key>29</key> <children> <key>500</key> <children> <key>3000</key> <children> <key>70000</key> </children> </children> </children> <key>50</key> <children> <key>600</key> <children> <key>3600</key> <children> <key>9862</key> </children> <children> <key>9863</key> </children> <children> <key>9864</key> </children> </children> </children> <key>70</key> <children> <key>900</key> <children> <key>3700</key> <children> <key>7862</key> </children> <children> <key>6863</key> </children> <children> <key>5864</key> </children> </children> <children> <key>5400</key> <children> <key>7892</key> </children> <children> <key>6563</key> </children> <children> <key>5464</key> </children> </children> </children></Root>'SELECT ParentID = c.x.value('../key[1]', 'int'), ChildID = c.x.value('key[1]', 'int')FROM @ClientInfo.nodes('//children') c(x) -- "//children" means "children nodes at all levels"GO
ParentID ChildID----------- -----------29 500500 30003000 7000029 600600 36003600 98623600 98633600 986429 900900 37003700 78623700 68633700 5864900 54005400 78925400 65635400 5464(17 row(s) affected)