Search code examples
sql-servert-sqlfor-xml

MS TSQL for xml path question regarding xpath element


I have the following TSQL statement:

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

which outputs:

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

but I want to have this output (the element name :

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

Does anybody know how to achieve this with T-SQL?

Thanks
Daniel


Solution

  • I don't think you'll be able to achieve this with T-SQL, unfortunately.

    The closest you could get is this:

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

    if you adapt your query to be:

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

    Sorry I can't be of more help here - guess that's a feature Microsoft hasn't really considered (so far)! :-)

    Marc