Click here to Skip to main content
15,886,578 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am using this query,

SELECT HEAD.ID AS "HEAD/@ID",
HEAD.CODE AS "HEAD/CODE",
CONVERT(VARCHAR,HEAD.DATE,112) AS "HEAD/DATE",
HEAD.DOCNO AS "HEAD/DOCNO",
ITEM.SERIAL AS "HEAD/ITEM/@ID",
ITEM.ITEMNO AS "HEAD/ITEM/ITEMNO",
ITEM.UOM AS "HEAD/ITEM/UOM",
ITEM.QTY AS "HEAD/ITEM/QTY"
FROM PRODUCT_HDR HEAD, PRODUCT_DTL ITEM
WHERE HEAD.CODE = ITEM.CODE AND HEAD.DATE = ITEM.DATE
FOR XML PATH ('IDOC'), ELEMENTS;

to get result in below format, but its not working.

XML
<?xml version="1.0" encoding="utf-8" ?>
<HEAD ID="1">
  <CODE>001</CODE>
  <DATE>20141208</DATE>
  <DOCNO>2001500000001</DOCNO>
  <ITEM ID="1">
    <ITEMNO>10001</ITEMNO>
    <UOM>KG</UOM>
    <QTY>10.000</QTY>
  </ITEM>
  <ITEM ID="2">
    <ITEMNO>10002</ITEMNO>
    <UOM>KG</UOM>
    <QTY>20.000</QTY>
  </ITEM>
  <ITEM ID="3">
    <ITEMNO>10003</ITEMNO>
    <UOM>KG</UOM>
    <QTY>30.000</QTY>
  </ITEM>
</HEAD>
Posted

Your data in SQL organised in rows like this:

head1item1
head1item2
head1item3
head2item1
head2item2

and so on...

But your XML reflects a structure like this...

head1item1item2item3
head2item1item2


This is a structure SQL can not handle...
 
Share this answer
 
I got the solution. Its right below,

SELECT HEAD.ID AS "HEAD/@ID",
HEAD.CODE AS "HEAD/CODE",
CONVERT(VARCHAR,HEAD.DATE,112) AS "HEAD/DATE",
HEAD.DOCNO AS "HEAD/DOCNO",
(SELECT ITEM.SERIAL AS "@ID",
ITEM.ITEMNO AS "ITEMNO",
ITEM.UOM AS "UOM",
ITEM.QTY AS "QTY"
FROM PRODUCT_DTL ITEM
WHERE HEAD.CODE = ITEM.CODE AND HEAD.DATE = ITEM.DATE
FOR XML PATH ('ITEM'), TYPE, ELEMENTS) AS "HEAD"
FROM PRODUCT_HDR HEAD
FOR XML PATH ('IDOC'), ELEMENTS;
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900