Je dois mettre à jour le champ GroupID à 0. J'ai trouvé comment récupérer la valeur, je rencontre actuellement des problèmes de mise à jour.Valeur de nœud XML de mise à jour dans SQL Server
Toute aide serait géniale!
<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)
Mise à jour
Ce que je dois faire maintenant est mise à jour GroupID de chaque ligne unique qui a la valeur de « 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
Ceci est mise à jour seule la première ligne qui répond ce critère. Comment est-ce que je mettrais à jour chaque rangée?
Update 2 Cette déclaration fonctionne. Il s'avère que la structure de la base de données pour le premier noeud peut être différente. Un simple //GroupID...etc mis à jour chaque ligne. Ce sont toujours les petites choses stupides qui nous trébuchent haha.
En fait, l'utilisation de nodes() et values () est une bonne pratique. Dans ce cas, cela ne fait aucune différence, mais si plusieurs colonnes sont demandées, mieux vaut utiliser nodes(): "La combinaison des méthodes nodes() et value() peut être plus efficace pour générer l'ensemble de lignes quand il a plusieurs colonnes "http://technet.microsoft.com/en-us/library/ms187508(SQL.90).aspx –
@Remus: oui, bon point - si vous avez besoin de plusieurs valeurs, l'utilisation de nodes() est tout à fait logique, je suis d'accord . –
Excellent. juste ce que j'ai besoin. –