• The syntax is not correct. The correct expression is [position()=sql:variable("@var")]. Here is an example:

    DECLARE @x XML, @cnt INT

    SELECT @x = '

    <a>

    <n>node 1</n>

    <n>node 2</n>

    <n>node 3</n>

    </a>'

    SELECT @cnt = 1

    WHILE @cnt <= 3 BEGIN

    SELECT @x.value('(/a/n[position()=sql:variable("@cnt")])[1]','VARCHAR(20)')

    SELECT @cnt = @cnt + 1

    END

    /*

    Prints

    node 1

    node 2

    node 3

    */

    .