I am new to XML queries in SQL Server. I would like write a query that
- Finds a value in child node and to remove its parent node
- Re-orders items order in child node
As my example below: my column's type is nvarchar(max) and stores value:
<Trainings>
<Training>
<Id>10</Id>
<Data>test1</Data>
<ItemOrder>1</ItemOrder>
</Training>
<Training>
<Id>12</Id>
<Data>test12</Data>
<ItemOrder>2</ItemOrder>
</Training>
<Training>
<Id>101</Id>
<Data>test111</Data>
<ItemOrder>3</ItemOrder>
</Training>
<Training>
<Id>102</Id>
<Data>test122</Data>
<ItemOrder>4</ItemOrder>
</Training>
</Trainings>
The expected result must be:
<Trainings>
<Training>
<Id>10</Id>
<Data>test1</Data>
<ItemOrder>1</ItemOrder>
</Training>
<Training>
<Id>101</Id>
<Data>test111</Data>
<ItemOrder>2</ItemOrder>
</Training>
<Training>
<Id>102</Id>
<Data>test122</Data>
<ItemOrder>3</ItemOrder>
</Training>
</Trainings>
I've tried with the query as below but how can I find the Training node number with test12 in Data child? and then reorder all ItemOrder for all Training nodes.
CREATE TABLE Resume ([Training] nvarchar(max));
INSERT INTO Resume ([Training])
VALUES ('<Trainings><Training><Id>10</Id><Data>test1</Data><ItemOrder>1</ItemOrder></Training><Training><Id>12</Id><Data>test12</Data><ItemOrder>2</ItemOrder></Training><Training><Id>101</Id><Data>test111</Data><ItemOrder>3</ItemOrder></Training><Training><Id>102</Id><Data>test122</Data><ItemOrder>4</ItemOrder></Training></Trainings>');
DECLARE @string NVARCHAR(MAX)
SELECT @string = [Training]
FROM Resume
DECLARE @xml XML
SET @xml = CONVERT(XML, @string)
SET @xml.modify('delete (/Trainings/Training)[2]')
SET @string = CONVERT(NVARCHAR(MAX), @xml)
SELECT @string
Here is the Fiddle link: http://sqlfiddle.com/#!6/894a0/3