7
votes

Comment supprimer un attribut d'une variable XML dans SQL Server 2008?

J'ai une table appelée XML (dans SQL Server 2008) et il dispose d'un champ appelé xmldocument de type xml . J'essaie de supprimer un attribut d'une variable XML.

Voici comment mon XML ressemble à xxx

ma requête xxx

quand j'exécute cette requête dans l'analyseur de requête Je vois le message "1 rangée (s) affecté (s)" mais en réalité, l'attribut XMLNS de clue_personal_auto n'est pas enlevé. Une idée de ce que je fais mal.

merci BB


2 commentaires

(1 ligne affectée) signifie simplement que vous avez effectué une mise à jour. S'il y avait une colonne d'horodatage, cela aurait changé. Juste comme update tbl Set ID = ID réussit également, mais ne fait rien


NOTEZ THA SQL-SERVEUR Fonction .Modify () Utilisez un fournisseur Langue de modification de données XML


3 Réponses :


6
votes

Vous devez utiliser avec xmlnamespaces , sinon "/ clue_personal_auto" Ne correspond pas à la liste de noms clue_personal_auto xmlns = "..." noeud.

Non seulement cela, vous ne pouvez pas réellement supprimer un espace de noms car il n'est pas un attribut normal.

Exemple de suppression d'un attribut régulier xxx


0 commentaires

2
votes

Je n'arrive pas à trouver un moyen facile de le faire - mais la vraie question reste: pourquoi voulez-vous supprimer l'espace de noms ?? Utilisation du avec xmlnamespaces ... construct, vous pouvez facilement utiliser les espaces de noms.

au lieu de mettre beaucoup d'efforts à vous en débarrasser - En savoir plus sur les espaces de noms XML et commencer à les utiliser!

Vous pouvez utiliser très facilement cet espace de noms XML dans vos requêtes: xxx

et être heureux avec elle - pas besoin de supprimer artificiellement xmlns = déclarations plus!


1 commentaires

L'une des raisons de se débarrasser des espaces de nom est quand ils brisent beaucoup de code hérité qui n'a jamais eu auparavant travailler avec eux. Dans mon application, les espaces de noms ne servent aucun but (autre que de faire fonctionner les commandes XPath existantes).



6
votes
UPDATE XML
  SET CONVERT(XML, REPLACE(CONVERT(NVARCHAR(MAX), XmlDocument), N' xmlns=...'))
WHERE ID = 357

1 commentaires

Nice - force brute mais efficace!