Pregunta

Tengo la siguiente instrucción TSQL:

select 
  tblName     "TblName",
  structure   "TblName/STRUCTURE",
  sqlRetrieve "TblName/SQLRETRIEVE",
  Identifier  "TblName/IDENTIFIER",
  '2'         "TblName/OBJECTTYPE"
from 
  configTable 
for xml path ('')

que genera:

<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>

pero quiero tener esta salida (el nombre del 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>

¿Alguien sabe cómo lograr esto con T-SQL?

Gracias
Daniel

¿Fue útil?

Solución

No creo que pueda lograr esto con T-SQL, desafortunadamente.

Lo más cercano que puede llegar es esto:

<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>

si adapta su consulta para que sea:

select 
  tblName '@Name',
  structure   "TblName/STRUCTURE",
  sqlRetrieve "TblName/SQLRETRIEVE",
  Identifier  "TblName/IDENTIFIER",
  '2'         "TblName/OBJECTTYPE"
from 
  configTable 
for xml path ('TABLE')

Lo siento, no puedo ser de más ayuda aquí, ¡supongo que es una característica que Microsoft realmente no ha considerado (hasta ahora)! :-)

Marc

Otros consejos

Si tiene algún control sobre la estructura XML, le ruego que no haga lo que está tratando de hacer. Me he encontrado con documentos XML donde los nombres de los elementos XML cambian según los datos y es horrible trabajar con ellos. Las declaraciones XPath son difíciles, XSLT es casi imposible.

Haz lo que sugiere marc_s, te lo agradecerás más tarde.

Si no tienes control sobre la estructura, entonces tienes mis condolencias.

Si te entendí correctamente, quieres un elemento raíz en lugar de tener muchas raíces principales.

Uso:

select   tblName '@Name',  structure   "TblName/STRUCTURE",  sqlRetrieve "TblName/SQLRETRIEVE",  Identifier  "TblName/IDENTIFIER",  '2'         "TblName/OBJECTTYPE"from   configTable for xml path (''), root('TABLE'), type
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top