Pergunta

Eu tenho a seguinte declaração TSQL:

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

que saídas:

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

mas eu quero ter essa saída (o nome do 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>

Alguém sabe como conseguir isso com T-SQL?

Graças
Daniel

Foi útil?

Solução

Eu não acho que você vai ser capaz de conseguir isso com T-SQL, infelizmente.

O mais próximo que você pode obter é a seguinte:

<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 você adaptar a sua consulta para ser:

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

Desculpe eu não posso ser de mais ajuda aqui - acho que é uma característica Microsoft não tem realmente considerado (até agora)! :-)

Marc

Outras dicas

Se você tem algum controle sobre a estrutura XML peço-lhe para não fazer o que você está tentando fazer. Já corri em documentos XML onde os nomes de elementos XML mudam com base em dados e é horrível para trabalhar. instruções XPath são difíceis, XSLT é quase impossível.

Do que marc_s sugere, você vai agradecer-lhe mais tarde.

Se você não tem controle sobre a estrutura, então você tem a minha simpatia.

Se eu entendi bem - você quer um elemento de raiz em vez de ter muitas raízes principais

.

Use:

select   tblName '@Name',  structure   "TblName/STRUCTURE",  sqlRetrieve "TblName/SQLRETRIEVE",  Identifier  "TblName/IDENTIFIER",  '2'         "TblName/OBJECTTYPE"from   configTable for xml path (''), root('TABLE'), type
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top