У меня есть XML, подобный следующему, представляющий данные таблицы SQL:
<Project>
<DataSource version="4" type="LiveDatabaseSource">
<ServerName>(local)</ServerName>
</DataSource>
<Tables>
<value>
<TableType>Generated</TableType>
<PopulationDetails version="2" type="PopulationDetails">
<PopulationType>RowCount</PopulationType>
<RowCount>10000</RowCount>
<ProportionTableExists>False</ProportionTableExists>
<Proportion>0</Proportion>
<TimeToPopulate>0</TimeToPopulate>
</PopulationDetails>
<Name>Table1</Name>
<Schema>dbo</Schema>
</value>
<value>
<TableType>Generated</TableType>
<PopulationDetails version="2" type="PopulationDetails">
<PopulationType>RowCount</PopulationType>
<RowCount>10000</RowCount>
<ProportionTableExists>False</ProportionTableExists>
<Proportion>0</Proportion>
<TimeToPopulate>0</TimeToPopulate>
</PopulationDetails>
<InvalidRowBehaviour>SkipRow</InvalidRowBehaviour>
<Included>False</Included>
<Append>False</Append>
<Name>Table2</Name>
<Schema>dbo</Schema>
</value>
</Tables>
</Project>
Это находится в одном столбце XML в SQL Server, и есть еще много <value>
записей, представляющих таблицы в базе данных. Мне нужно обновить PopulationDetails.RowCount
путем поиска значения в Name
: т.е. я хочу обновить Table2
до 60000 строк с использованием T-SQL.
Я могу найти правильный узел через Name
, но у меня возникают проблемы с обновлением значения в его равноправном PopulationDetails.Name
узле. Все, что у меня есть, - это возможность обновить n-ую запись:
UPDATE dbo.SQLGenXML
SET GenXML.modify('replace value of
(/Project/Tables/value/PopulationDetails/RowCount/text()) [1] with ("60000")')
WHERE id = 1;
Существует множество примеров для поиска узлов на основе атрибутов и обновления значения, но не для этого типа поиска на уровне равноправных узлов. (или мой гугл-фу отстой).