Tenho uma etapa do processo em que tenho um documento XML em uma coluna do SQL Server e preciso alterar o texto de um nó que pode ocorrer várias vezes. Modify() com 'replace' DML opera apenas em nós únicos. Para complicar, a substituição precisa acontecer com base em uma tabela de consulta mantida localmente.
Posso usar nodes() para obter uma lista de node e planejar uma consulta para juntar os dados apropriadamente, mas, nesse ponto, não tenho mais uma referência na qual modify() possa atuar.
Parece que minha única opção é criar um procedimento ou função CLR e usar algum tipo de iteração XML nativa dotnet. Isso é menos atraente, já que a lógica de negócios ficaria bloqueada no código-fonte, não visível na definição do procedimento. Existe alguma forma de fazer essa transformação usando exclusivamente os métodos XML?
Três opções vêm à mente.
Use um loop while e modifique um nó por vez
Destrua o XML usando nodes (), modifique os valores e reconstrua usando para xml.
Converta o XML em uma string e use replace().
O que funcionar melhor no seu caso depende da forma do XML e do tipo de modificação que você precisa fazer. Se você adicionar as estruturas da tabela com dados de amostra e saída esperada à pergunta, poderá obter uma resposta melhor.