MS SQL per domande sul percorso xml relative all'elemento xpath
-
08-07-2019 - |
Domanda
Ho la seguente dichiarazione TSQL:
select
tblName "TblName",
structure "TblName/STRUCTURE",
sqlRetrieve "TblName/SQLRETRIEVE",
Identifier "TblName/IDENTIFIER",
'2' "TblName/OBJECTTYPE"
from
configTable
for xml path ('')
quali output:
<TblName>PD_CODE_PRODUCTS
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</TblName>
<TblName>PD_two
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</TblName>
ma voglio avere questo output (il nome dell'elemento:
<PD_CODE_PRODUCTS>
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</PD_CODE_PRODUCTS>
<PD_two>
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</PD_two>
Qualcuno sa come raggiungere questo obiettivo con T-SQL?
Grazie
Daniel
Soluzione
Purtroppo non credo che riuscirai a ottenere questo risultato con T-SQL.
Il più vicino che potresti ottenere è questo:
<TABLE Name="PD_CODE_PRODUCTS">
<TblName>
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</TblName>
</TABLE>
<TABLE Name="PD two">
<TblName>
<STRUCTURE>PD_CODE_PRODUCTS</STRUCTURE>
<SQLRETRIEVE>BATCHSP</SQLRETRIEVE>
<IDENTIFIER>DATA_OWNER</IDENTIFIER>
<OBJECTTYPE>2</OBJECTTYPE>
</TblName>
</TABLE>
se si adatta la query a:
select
tblName '@Name',
structure "TblName/STRUCTURE",
sqlRetrieve "TblName/SQLRETRIEVE",
Identifier "TblName/IDENTIFIER",
'2' "TblName/OBJECTTYPE"
from
configTable
for xml path ('TABLE')
Mi dispiace non poter essere di più aiuto qui - suppongo che sia una caratteristica che Microsoft non ha davvero preso in considerazione (finora)! :-)
Marc
Altri suggerimenti
Se hai qualche controllo sulla struttura XML ti prego di non fare quello che stai cercando di fare. Ho incontrato documenti XML in cui i nomi degli elementi XML cambiano in base ai dati ed è orribile con cui lavorare. Le dichiarazioni XPath sono difficili, XSLT è quasi impossibile.
Fai ciò che Marc_s suggerisce, lo ringrazierai più tardi.
Se non hai alcun controllo sulla struttura, allora hai le mie simpatie.
Se ti ho capito bene, vuoi un elemento radice invece di avere molte radici principali.
Usa:
select tblName '@Name', structure "TblName/STRUCTURE", sqlRetrieve "TblName/SQLRETRIEVE", Identifier "TblName/IDENTIFIER", '2' "TblName/OBJECTTYPE"from configTable for xml path (''), root('TABLE'), type