如何使用以下格式的T-SQL创建XML文件 [英] How to create XML file using T-SQL in below format

查看:75
本文介绍了如何使用以下格式的T-SQL创建XML文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用此查询,



SELECT HEAD.ID ASHEAD / @ ID,

HEAD.CODE AS HEAD / CODE,

CONVERT(VARCHAR,HEAD.DATE,112)ASHEAD / DATE,

HEAD.DOCNO作为HEAD / DOCNO,

ITEM.SERIAL作为HEAD / ITEM / @ ID,

ITEM.ITEMNO作为HEAD / ITEM / ITEMNO,

ITEM.UOM作为HEAD / ITEM / UOM,

ITEM.QTY作为HEAD / ITEM / QTY

来自PRODUCT_HDR HEAD,PRODUCT_DTL项目

在哪里HEAD.CODE = ITEM.CODE和HEAD.DATE = ITEM.DATE

FOR XML PATH('IDOC'),ELEMENTS;



得到以下格式的结果,但它不起作用。



 <?   xml     version   =  1.0   编码  =  utf-8    >  
< HEAD ID = 1 >
< 代码 > 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 >

解决方案

SQL中的数据按行组织是这样的:



head1 ITEM1
头像1 ITEM2
头像1 项目3
HEAD2 ITEM1
HEAD2 ITEM2


等......



但你的XML反映了一个结构像这样...



head1 ITEM1 ITEM2 项目3
HEAD2 ITEM1 item2




这是SQL无法处理的结构...

我得到了解决方案。它在下面,



SELECT HEAD.ID为HEAD / @ ID,

HEAD.CODE为HEAD / CODE,

CONVERT(VARCHAR,HEAD.DATE,112)ASHEAD / DATE,

HEAD.DOCNO ASHEAD / DOCNO,

(选择ITEM.SERIAL作为@ID,

ITEM.ITEMNO作为ITEMNO,

ITEM.UOM作为UOM,

ITEM.QTY为QTY

来自PRODUCT_DTL项目

WHERE HEAD.CODE = ITEM.CODE和HEAD.DATE = ITEM.DATE

FOR XML PATH('ITEM'),TYPE,ELEMENTS)ASHEAD

FROM PRODUCT_HDR HEAD

for XML PATH('IDOC'),ELEMENTS;

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

解决方案

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


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;


这篇关于如何使用以下格式的T-SQL创建XML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆