Ok i have this working however I still don't understand how to get all the values when my select returns more than 1 row. I assume I need a loop just not sure if there is a better way.Here is what I have:DECLARE @x XML;SELECT @x = r.XMLDataFROM RulesetGroups rgINNER JOIN Rulesets rs onrg.RulesetGroupID = rs.RulesetGroupIDINNER JOIN Rules r onrs.RulesetID = r.RulesetIDWHERE r.RuleTypeID = 3 and r.XMLData.value('(/Screen/ScreenOption/@Name)[1]', 'varchar(255)') is not null;-- select "Name" WITH Num(i)AS( SELECT 1 UNION ALL SELECT i + 1 FROM Num WHERE i < (SELECT @x.value('count(/Screen/ScreenOption/@Name)','varchar(255)') ))SELECT x.value('@Name[1]', 'varchar(20)') FROM NumCROSS APPLY @x.nodes('/Screen/ScreenOption[position()=sql:column("i")]') e(x);
My XML for one row. I will have hundreds of these though in different rows:<Screen Title=""> <ScreenOption Sequence="1" Name="BTWidth" /> <ScreenOption Sequence="2" Name="BTHeight" /></Screen>
Any help will be appreciated.