Necesito un script SQL que se va a tirar de una cadena XML de la base de datos [varchar(max)], inspeccionar, y actualizarla si se ajusta a una situación específica.
Imagine que mi xml está en el siguiente formato:
<root>
<level1>
<level2>
<level3 />
<level3 />
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="this one is not of interest">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for ABC">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
</root>
Así, lo que quiero hacer es actualizar todos los elementos cuyo nombre es "level6" y que tienen un atributo llamado "aquí", cuyo valor comienza con "ahora es el momento". Así, que debe coincidir con sólo dos elementos anteriores.
Pero, ese no es el único criterio de selección. La lista de opciones no debe contener <option here="now" />
. Así, que debe salir de nosotros con sólo uno de los elementos para la actualización.
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
A ese elemento, a continuación, deseo agregar la falta <option here="now" />
, por lo que se convierte en:
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
Así, el resultado final debe ser:
<root>
<level1>
<level2>
<level3 />
<level3 />
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
<option here="now" /> // <- this one new
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="this one is not of interest">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for ABC">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
</root>
Suponga que puedo leer los datos de la DB en una cadena, y que sé cómo actualizar la base de datos, por lo que es realmente la manera de manipular la cadena xml en SQL (SQL Server).