How to replace a pointer value with a variable in sql xml?

neallion

New Member
I need to write a WHILE loop and pass a variable to an xml query:Given this logic:\[code\]DECLARE @count INT = 0;DECLARE @pointer INT = 0;DECLARE @pointer_str varchar(100);DECLARE @MyXML XMLSET @MyXML = '<SampleXML> <Colors> <Color1>White</Color1> <Color2>Blue</Color2> <Color3>Black</Color3> <Color4 Special="Light">Green</Color4> <Color5>Red</Color5> </Colors> <Colors> <Color1>White</Color1> <Color2>Blue</Color2> <Color3>Black</Color3> <Color4 Special="Light">Green</Color4> <Color5>Red</Color5> </Colors> </SampleXML>'SET @count = ( SELECT a.b.value('count(/SampleXML/Colors)', 'int') FROM @MyXML.nodes('data') a(b) )WHILE @count < @pointer BEGIN SELECT a.b.value('Colors[' + @pointer + ']/Color1[1]','varchar(10)') AS Color1 FROM @MyXML.nodes('SampleXML') a(b); SELECT @pointer = @pointer + 1; END \[/code\]I am trying to get the following variable in a SELECT statement to parse XML but I receive the following error:\[code\]The argument 1 of the XML data type method "value" must be a string literal.\[/code\]Also, when I pass it the literal value of '1', I can't see the select being run inside the loop. can someone please help me?
 
Top