У меня есть столбец XML в таблице SQL Server. Я хочу добавить атрибут к узлам, присутствующим в XML. Этот атрибут будет уникальным идентификатором для узлов.
Я написал некоторый код вроде:
DECLARE @i int, @key varchar(20);
SET @key = 'key'
SET @i = 1
IF (@i < 10)
SET @key = @key + @i
UPDATE copy
SET dataxml.modify('insert attribute key {@key}
into (/Package[1]/Section/*[local-name() = ("List", "InputNumber", "InputText")][@i])[1]')
WHERE id = 10;
Я не уверен, как l oop над этим XML и как чтобы точно добавить атрибут в правильный узел, потому что он имеет такие узлы, как List, InputNumber, InputText в случайном порядке.
XML выглядит следующим образом:
<Package>
<Section name='BOX'>
<InputNumber description="[1] What is the height of the Box.">
<value/>
</InputNumber>
<InputNumber description="[2] What is the width of the Box.">
<value/>
</InputNumber>
<List description="[3] What is the type of BOX.">
<option/>
</List>
</Section>
<Section name='Cover'>
<InputText description="[4] Color of cover.">
<value/>
</InputText>
<List description="[5] Type of cover.">
<option/>
</List>
</Section>
</Package>
Я хочу, чтобы вывод быть как:
<Package>
<Section name='BOX'>
<InputNumber key="key1" description="[1] What is the height of the Box.">
<value/>
</InputNumber>
<InputNumber key="key2" description="[2] What is the width of the Box.">
<value/>
</InputNumber>
<List key="key3" description="[3] What is the type of BOX.">
<option/>
</List>
</Section>
<Section name='Cover'>
<InputText key="key4" description="[4] Color of cover.">
<value/>
</InputText>
<List key="key5" description="[5] Type of cover.">
<option/>
</List>
</Section>
</Package>
Я получаю ошибку при выполнении упомянутого запроса:
XQuery [copy.Data XML .modify ()]: узлы атрибутов верхнего уровня не поддерживаются