Nome campo con problemi di spazio in caso di uscita per XML AUTO
-
16-10-2019 - |
Domanda
My SQL è molto semplice
selezionare ID come [ID impiegato], EmpName come [Nome dipendente], Sal come [Stipendio] dal Emp FOR XML AUTO, ELEMENTI, ROOT ( 'clienti')
quando eseguo questo sql poi io sono sempre in uscita in formato XML. l'output XML è
<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>
se u vedere il nome depositato xml allora la u può capire che il nome del campo viene generato dinamicamente
a causa di spazio.
Soluzione
Ecco l'output siete alla ricerca di che finge di essere XML. Non sarà nemmeno in grado di lanciare a XML in qualsiasi parser (almeno non dovrebbe - non lo farà in 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_', ' ')
Output (riformattato per chiarezza - SQL Server restituisce il tutto su una riga)
<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>
Altri suggerimenti
elementi XML a W3Schools:
elementi XML devono seguire queste regole di denominazione:
- I nomi possono contenere lettere, numeri e altri caratteri
- I nomi non possono iniziare con un numero o punteggiatura carattere
- I nomi non possono iniziare con il xml lettere (o XML, o XML, etc)
- I nomi non possono contenere spazi
Ogni nome può essere utilizzato, non parole sono riservate.
(enfasi aggiunta)
Credo che questo è la stessa domanda? FOR XML AUTO e nome della colonna con problemi di spazio in SQL Server 2005
La risposta è la stessa. Non si può avere uno spazio in un nome di tag XML.