2017-08-28 6 views
0

J'ai le code sql suivant pour générer un bloc de xml.Supprimer le code d'erreur pour l'attribut xml - MS SQL Pour xml (_x003D)

SELECT top 1 
'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0' AS [xmlns], 
(SELECT top 1 
count(*)AS 'number-of-accounts', 
-- 
-- TO DO 
-- 
FOR XML PATH('payment-import-header'), TYPE), 
FOR XML RAW ('consumer-payment-import-job'); 

Le putout est la suivante: enter image description here

Comment puis-je me débarrasser de "_x003D" du nom d'attribut? Si j'insère "=" ou "@", cela ajoutera une autre valeur aléatoire. Je suppose que ce sont des balises d'erreur.

Merci

+0

Essayez ceci: https://docs.microsoft.com/en-us/sql/relational-databases/xml/add-namespaces- to-queries-with-with-xmlnamespaces – Alex

Répondre

1

Vous ajoutez un espace de noms par défaut en utilisant la clause WITH XMLNAMESPACES, avec le mot-clé DEFAULT.

Exemple:

WITH XMLNAMESPACES(DEFAULT 'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0') 
SELECT 1 
FOR XML PATH('consumer-payment-import-job'); 

avec un résultat

<consumer-payment-import-job xmlns="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0">1</consumer-payment-import-job> 
+0

Merci pour la réponse, cela va créer un attribut pour tous les éléments, je le veux seulement pour consumer-payment-import-job. –

+0

@aridi Malheureusement, il n'y a pas de moyen simple de le faire si vous avez plusieurs clauses 'FOR XML' dans votre requête. Il y a un problème de [microsoft connect avec une demande de suppression de l'ajout de l'espace de noms à chaque élément pour plusieurs clauses 'FOR XML'] (https://connect.microsoft.com/SQLServer/feedback/details/265956/suppress-namespace-attributes -in-nested-select-for-xml-instructions). Si vous pouviez upvote, peut-être qu'ils rendront cela possible à l'avenir. –

+0

@aridi La solution de contournement implique des fonctions de chaîne btw, je suis sûr que vous pouvez comprendre cela vous-même. –