Ho bisogno di aggiornare il campo ID gruppo a 0. Ho scoperto come recuperare il valore, ora sto riscontrando problemi nell'aggiornarlo.Aggiornamento del valore del nodo XML in SQL Server
Qualsiasi aiuto sarebbe fantastico!
<ProblemProfile>
<GroupID>-1</GroupID>
<LayoutID>1</LayoutID>
<MyQueries>false</MyQueries>
</ProblemProfile>
Declare @Result xml
set @Result = convert(xml,(select ProfileXML from profiles where id = 23))
SELECT x.value('.', 'int') ID
FROM @Result.nodes('/ProblemProfile/GroupID') as R(x)
Aggiornamento
Che cosa devo fare ora è aggiornamento GroupID di ogni singolo riga che ha il valore di 'foo'
declare @foo int
set @foo = -1
UPDATE profiles
SET ProfileXML.modify('replace value of (/ProblemProfile/GroupID/text())[1] with "0"')
WHERE ProfileXML.value('(/ProblemProfile/GroupID)[1]', 'int') = @foo
Questo è l'aggiornamento solo la prima riga che soddisfa questo criterio Come aggiornerei ogni riga?
Update 2 Tale affermazione funziona. Risulta che la struttura del database per il primo nodo può essere diversa. Un semplice //GroupID...etc ha aggiornato ogni riga. Sono sempre le piccole cose stupide a farci inciampare a haha.
In realtà l'uso di nodi() e valori() è una buona pratica. In questo caso non fa alcuna differenza, ma se sono richieste più colonne è meglio usare i nodi(): "La combinazione dei metodi nodes() e value() può essere più efficiente nel generare il set di righe quando ha più colonne "http://technet.microsoft.com/en-us/library/ms187508(SQL.90).aspx –
@Remus: sì, buon punto: se hai bisogno di più valori, usare i nodi() ha senso, sono d'accordo . –
Eccellente. proprio quello di cui ho bisogno –