Обновление индекса позиции в xml после выбора

#sql-server #xml #tsql

#sql-сервер #xml #tsql

Вопрос:

У меня есть следующий xml, который при выборе в группах не более трех должен иметь измененное значение индекса, чтобы отразить его новую позицию в возвращаемом xml. Я написал, какой результат мне нужен, в нижней части этого сообщения.

 <root>
  <document>
    <index>1</index>
    <text>stuff</text>
  </document>
  <document>
    <index>2</index>
    <text>stuff</text>
  </document>
  <document>
    <index>3</index>
    <text>stuff</text>
  </document>
  <document>
    <index>4</index>
    <text>stuff</text>
  </document>
  <document>
    <index>5</index>
    <text>stuff</text>
  </document>
  <document>
    <index>6</index>
    <text>stuff</text>
  </document>
  <document>
    <index>7</index>
    <text>stuff</text>
  </document>
  <document>
    <index>8</index>
    <text>stuff</text>
  </document>
  <document>
    <index>9</index>
    <text>stuff</text>
  </document>
  <document>
    <index>10</index>
    <text>stuff</text>
  </document>
</root>
 

После извлечения максимум группами по три.

 <root>
  <document>
    <index>1</index>
    <text>stuff</text>
  </document>
  <document>
    <index>2</index>
    <text>stuff</text>
  </document>
  <document>
    <index>3</index>
    <text>stuff</text>
  </document>
</root

<root>
  <document>
    <index>1</index>
    <text>stuff</text>
  </document>
  <document>
    <index>2</index>
    <text>stuff</text>
  </document>
  <document>
    <index>3</index>
    <text>stuff</text>
  </document>
</root

<root>
  <document>
    <index>1</index>
    <text>stuff</text>
  </document>
  <document>
    <index>2</index>
    <text>stuff</text>
  </document>
  <document>
    <index>3</index>
    <text>stuff</text>
  </document>
</root

<root>
  <document>
    <index>1</index>
    <text>stuff</text>
  </document>
</root
 

Комментарии:

1. В результирующем XML у вас будет корневой узел, содержащий все элементы <root>?

2. Нет. Каждая группа из отдельного выбора, выполняемого для исходного xml.

Ответ №1:

Сохраните XML, возвращенный вашим запросом, в переменной и обновите значение индекса.

 set @XMLTarget.modify('replace value of (/root/document/index/text())[1] with 1')
set @XMLTarget.modify('replace value of (/root/document/index/text())[2] with 2')
set @XMLTarget.modify('replace value of (/root/document/index/text())[3] with 3')
 

SQL скрипка