Как удалить имя столбца при выборе из столбца XMLTYPE с помощью FOR XML PATH - PullRequest
5 голосов
/ 25 января 2011

У меня есть таблица со столбцом XMLTYPE с именем «InvoiceXML».

Данные в этом столбце - это XML в форме:

<Invoice CustomerNum="1234" >
<CustomDeliveryDetails />
</Invoice>

Когда я делаю

SELECT ... FOR XML PATH(''), ROOT('Invoices') 

В итоге я получаю:

<Invoices>
 <InvoiceXML>
  <Invoice CustomerNum="1234" >
  <CustomDeliveryDetails />
  </Invoice>
 </InvoiceXML>
</Invoices>

Как остановить имя столбца InvoiceXML, появляющееся в выводе?

Ответы [ 3 ]

4 голосов
/ 25 января 2011
declare @T table (invoiceXML xml)

insert into @T values (
  '<Invoice CustomerNum="1234" >
     <CustomDeliveryDetails />
   </Invoice>
  ')

insert into @T values (
  '<Invoice CustomerNum="4321" >
     <CustomDeliveryDetails />
   </Invoice>
  ')

select (select T.invoiceXML)
from @T as T
for xml path(''), root('Invoices')

Редактировать 1 Подзапрос (select T.invoiceXML) не имеет имени столбца, поэтому он удаляется.

1 голос
/ 25 января 2011

Попробуйте:

SELECT cast(cast(InvoiceXML as nvarchar(max)) + '' as XML)
FROM whatever
FOR XML PATH(''), ROOT('Invoices')
0 голосов
/ 25 января 2011

Попробуйте:

SELECT InvoiceXML.query('//Invoice')
  FROM <YOUR_TABLE>
FOR XML PATH('')
Попробуйте указать запрос xpath для выставления счета в ПУТИ FPR XML, например: `FOR XML PATH ('// InvoiceXML')`
...