Eu preciso de um script SQL que irá puxar uma cadeia de caracteres XML do DB [varchar(max)], inspecioná-lo e atualizá-lo se ele se adapta a uma situação específica.
Imagine que o meu xml com o seguinte 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>
Então, o que eu quero fazer é atualizar todos os elementos cujo nome é "level6" e que tem um atributo chamado "aqui", cujo valor começa com "agora é o tempo". Então, o que deve corresponder a apenas dois elementos acima.
Mas, esse não é o único critério de seleção. A lista de opções não deve conter <option here="now" />
. Então, o que deve deixar-nos com apenas um elemento para atualização.
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
A esse elemento, então eu quero adicione a falta <option here="now" />
, de modo que torna-se:
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
Assim, o resultado final deve 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>
Suponha que eu possa ler os dados do DB em uma seqüência de caracteres, e que eu sei como atualizar o banco de dados, por isso é realmente como manipular a string xml no SQL (SQL Server).