2009-03-10 4 views
2

У меня есть следующее TSQL заявление:MS TSQL для XML Path вопроса относительно XPATH элемента

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

, который выводит:

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

, но я хочу, чтобы этот вывод (имя элемента:

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

Кто-нибудь знает, как достичь этого с помощью T-SQL?

Благодаря
Daniel

ответ

1

Я не думаю, что вы будете в состоянии добиться этого с T-SQL, к сожалению.

Ближайший вы можете получить это:

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

, если адаптировать запрос быть:

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

К сожалению, я не могу быть больше помощи здесь - думаю, что это функция Microsoft на самом деле не считал (до сих пор)! :-)

Marc

0

Если у вас есть какой-либо контроль над структурой XML я прошу вас не делать то, что вы пытаетесь сделать. Я столкнулся с XML-документами, в которых имена элементов XML изменяются на основе данных, и с ними ужасно работать. Утверждения XPath сложны, XSLT практически невозможно.

Выполняйте то, что предлагает marc_s, вы поблагодарите его позже.

Если у вас нет контроля над структурой, то у вас есть мои симпатии.

0

Если я правильно понял вас - вы хотите, чтобы один корневой элемент вместо множества основных корней.

Использование:

select tblName '@Name', structure "TblName/STRUCTURE", sqlRetrieve "TblName/SQLRETRIEVE", Identifier "TblName/IDENTIFIER", '2'   "TblName/OBJECTTYPE"from configTable for xml path (''), root('TABLE'), type 
Смежные вопросы