Cómo encontrar todos los nodos principales por un valor en el nodo secundario con SQL Server

Huy DQ

Soy nuevo en consultas XML en SQL Server. Me gustaría escribir una consulta que

  1. Encuentra un valor en el nodo secundario y elimina su nodo principal
  2. Reordena el orden de los artículos en el nodo secundario

Como mi ejemplo a continuación: el tipo de mi columna es nvarchar(max)y almacena el valor:

<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>

El resultado esperado debe ser:

<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>

Intenté con la consulta de la siguiente manera, pero ¿cómo puedo encontrar el Trainingnúmero de nodo test12en el Dataniño? y luego reordenar todo ItemOrderpara todos los Trainingnodos.

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

Aquí está el enlace de Fiddle : http://sqlfiddle.com/#!6/894a0/3

Yo trabajo para bac

Simplemente use XPath con el predicado que busca

set @xml.modify('delete (/Trainings/Training[./Data = "test12"])')

ACTUALIZACIÓN: para resolver también el segundo problema, propongo utilizar un enfoque relacional XML completamente diferente:

SELECT c.value('(./Id/node())[1]','int') AS Id,
       c.value('(./Data/node())[1]','nvarchar(max)') AS Data,
       row_number() over (order by c.value('(./Id/node())[1]','int')) as ItemOrder
FROM @xml.nodes('/Trainings/Training') AS A(c)
WHERE c.value('(./Data/node())[1]','nvarchar(max)') != 'test12'
FOR XML PATH('Training'),ROOT('Trainings'),TYPE

manifestación

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Nodos xml () en tsql: hacer coincidir los nodos principales con los atributos del nodo secundario

Nodos xml () en tsql: hacer coincidir los nodos principales con los atributos del nodo secundario

Cómo encontrar todos los nodos secundarios de un nodo en titiritero

¿Cómo encuentro todos los nodos que comparten al menos n nodos con un nodo dado?

Dado un elemento, ¿cómo borrar todos los nodos con el valor del elemento dado?

¿Cómo puedo conectar dos nodos principales en un nodo secundario y cómo hacer una información sobre herramientas para cada nodo en el árbol de forma pragmática? en D3 js (SVG)

llevar los nodos principales a un nodo dado en el dendograma d3

¿Puede un nodo secundario tener varios nodos principales en el diseño de fuerza plegable usando D3?

¿Cómo filtrar los nodos principales y luego filtrar los nodos secundarios sin que los padres se vean afectados por el filtro secundario? Neo4j 3.5

Cómo enumerar todos los elementos principales posibles de un elemento secundario en xmlstarlet

Cómo enumerar todos los elementos principales posibles de un elemento secundario en xmlstarlet

¿Cómo edito el valor de un nodo específico en XML cuando hay varios nodos con el mismo nombre?

Kendo TreeView Mover los nodos principales para cambiar el orden de clasificación pero no permitir que un padre se arrastre debajo de un nodo secundario

¿Cómo puedo eliminar todos los nodos en el nodo rojo?

¿Cómo puedo eliminar el nodo secundario de Firebase con el mismo nombre? Obtener la clave para eliminar de un nodo y eliminar los nodos con la misma clave del otro.

Cómo buscar un solo nodo, no todos los nodos

Cómo buscar un solo nodo, no todos los nodos

Cómo leer el valor de todos los nodos con el nombre de los nodos de XmlDocument

Neo4j Cypher: ¿Cómo mostrar el gráfico de todos los nodos de un determinado tipo con un nodo común?

Cómo reemplazar un valor de nodo con otro valor de nodo en datos XML en SQL Server

Cómo obtener todos los registros con el valor máximo en una tabla de SQL Server

NodeJS cómo encontrar todos los nodos XML por elemento

NodeJS cómo encontrar todos los nodos XML por elemento

Cómo colorear los 20 nodos principales sobre el resto de los nodos en NetworkX

cómo cambiar el valor de texto del nodo secundario en un archivo xml usando c #

cómo cambiar el valor de texto del nodo secundario en un archivo xml usando c #

¿Cómo encontrar el promedio máximo de todos los campos agrupados por ID en SQL?

Los nodos secundarios aparecen en todos los nodos principales

cómo encontrar todos los nodos secundarios en el árbol jerárquico