Nom du champ avec le problème de l'espace en cas de sortie pour auto xml
-
16-10-2019 - |
Question
my sql est très simple
sélectionnez ID comme [ID employé], EmpName comme [Nom de l'employé], Sal comme [Salaire] de Emp FOR XML AUTO, ELEMENTS, RACINE ( ??'clients')
quand j'exécute ce sql alors je reçois une sortie au format XML. la sortie XML est
<customers>
<Emp>
<Employee_x0020_ID>1</Employee_x0020_ID>
<Employee_x0020_Name>Tridip</Employee_x0020_Name>
<Salary>2500</Salary>
</Emp>
<Emp>
<Employee_x0020_ID>2</Employee_x0020_ID>
<Employee_x0020_Name>Ari</Employee_x0020_Name>
<Salary>4000</Salary>
</Emp>
<Emp>
<Employee_x0020_ID>3</Employee_x0020_ID>
<Employee_x0020_Name>Dibyendu</Employee_x0020_Name>
<Salary>3500</Salary>
</Emp>
</customers>
si u voir le xml nom déposé alors u peut comprendre que le nom du champ est généré dynamiquement
En raison de l'espace.
La solution
Voici la sortie que vous recherchez qui se fait passer pour XML. Vous pourrez même pas être en mesure de le jeter à XML dans un analyseur (au moins il ne devrait pas - il ne sera pas dans SQL Server).
;with emp(ID, EmpName, Sal) as (select
1, 'tridip', 2500 union all select
2, 'ari', 4000)
select replace(convert(varchar(max),(
select ID as [Employee ID], EmpName as [Employee Name], Sal as [Salary]
from Emp
FOR XML AUTO, ELEMENTS, ROOT('customers'))),
'_x0020_', ' ')
Sortie (reformaté pour plus de clarté - SQL Server renvoie tout sur une ligne)
<customers><Emp><Employee ID>1</Employee ID><Employee Name>tridip
</Employee Name><Salary>2500</Salary></Emp><Emp>
<Employee ID>2</Employee ID><Employee Name>ari</Employee Name>
<Salary>4000</Salary></Emp></customers>
Autres conseils
De à W3Schools:
éléments XML doivent suivre ces règles de nommage:
- Les noms peuvent contenir des lettres, des chiffres et autres caractères
- Les noms ne peuvent pas commencer par un caractère numérique ou la ponctuation
- Les noms ne peuvent pas commencer par les lettres xml (ou XML, ou Xml, etc)
- Les noms ne peuvent pas contenir des espaces
Tout nom peut être utilisé, pas de mots sont réservés.
(soulignement ajouté)
Je suppose que cela est la même question? FOR XML AUTO et le nom de la colonne avec problème d'espace dans SQL Server 2005
La réponse est la même. Vous ne pouvez pas avoir un espace dans un nom de balise XML.