Этот ответ, вероятно, поздно ... Но он все еще может быть полезным ...
Должен признать, что я не совсем понял вашу проблему. Попробуйте это:
A mockup-XML
DECLARE @xml XML=
N'<Plans>
<Plan>
<Details>
<IsSelected>true</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
</Plans>';
- Этот запрос ответит на ваш вопрос
если я смогу получить количество узлов, как, скажем, для приведенных выше данных, он должен вернуть счетчик 3, я смогу это исправить
SELECT @xml.value('count(/Plans/Plan)','int') AS CountOfPlans;
- И этот запрос изменит второй <IsSelected>
на новое значение
DECLARE @position INT=2;
DECLARE @newValue VARCHAR(100)='blah';
SET @xml.modify('replace value of (/Plans/Plan[sql:variable("@position")]/Details/IsSelected/text())[1] with sql:variable("@newValue")');
SELECT @xml;
Первый возвращает «3», а второй этот XML
<Plans>
<Plan>
<Details>
<IsSelected>true</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>blah</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
</Plans>