How to find all parent node by a value in child node with SQL Server

Viewed 886

I am new to XML queries in SQL Server. I would like write a query that

  1. Finds a value in child node and to remove its parent node
  2. 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

1 Answers
Related