Tsql 使用SQL创建Xml

Tsql 使用SQL创建Xml,tsql,Tsql,您好,我正在尝试使用sql创建xml。我的代码如下: SELECT --so.SalesOrderID, --so.name as 'OrderName', so.zon_cartid as "zcom_order_id", c.zon_emailaddress1 As "email", so.OrderNumber, so.createdon As "created", so.totallineitemamount As "Sub_tot

您好,我正在尝试使用sql创建xml。我的代码如下:

SELECT
    --so.SalesOrderID,
    --so.name as 'OrderName',
    so.zon_cartid as "zcom_order_id",
    c.zon_emailaddress1 As "email",
    so.OrderNumber,
    so.createdon As "created",
    so.totallineitemamount As "Sub_total",
    so.totalamount as "Order_total",
    so.totaltax As "oder_tax",
    so.[description] As "Order_note",
    so.zon_ordersubsource as "order_source",
    so.submitstatus As "order_status",
    so.discountamount As "order_discount",
    --c.FirstName,
    --c.LastName,
    --a.name as 'AccountName',
   (SELECT --sod.SalesOrderDetailID,
        p.zon_isbn10,
        sod.Zon_producttype,
        --p.Zon_title,
        --sod.Zon_status,
        SOD.Quantity As "Quantity", 
       SOD.PricePerUnit As "Price",
       SOD.Tax As "Tax",
       SOD.ManualDiscountAmount As "Product_discount"
       --sod.extendedamount
    FROM SalesOrderDetail sod
    inner join Product p on sod.productid = p.productid
    WHERE so.SalesOrderId = sod.SalesOrderId
    ORDER by sod.SalesOrderDetailID
    FOR XML PATH('Product'),Type) As "Products", 
    (Select so3.ShippingMethodCode,
                  so3.freightamount, 
    (Select    c.firstname,
                     c.lastname, 
               so2.Shipto_Line1,
               so2.Shipto_Line2,
               so2.Shipto_Line3,
               so2.Shipto_City As "city",
               so2.Shipto_StateorProvince As "state",
               so2.Shipto_PostalCode As "postal",
               so2.shipto_country As "country",
               so2.Shipto_telephone As "phone",
               so2.Shipto_fax As "fax"
              From SalesOrder so2
              WHERE so2.SalesOrderId = so.SalesOrderId
             FOR XML PATH(''),Type) As "ShippingAddress" 
              From SalesOrder so3
              WHERE so3.SalesOrderId = so.SalesOrderId
              FOR XML PATH(''),Type),
   (Select     c.firstname,
               c.lastname, 
               so4.billto_Line1,
               so4.billto_Line2,
               so4.billto_Line3,
               so4.billto_City As "city",
               so4.billto_StateorProvince As "state",
               so4.billto_PostalCode As "postal",
               so4.billto_country As "country",
               so4.billto_telephone As "phone",
               so4.billto_fax As "fax"
              From SalesOrder so4
              WHERE so4.SalesOrderId = so.SalesOrderId
             FOR XML PATH(''),Type) As "MailingAddress"
FROM SalesOrder so
left outer join Contact c on c.contactid = so.customerid 
left outer join Account a on a.accountid = so.customerid
WHERE so.CreatedOn > '2011-08-08'
FOR XML PATH('Order'),ROOT('message')
我的输出看起来如下所示:

<message>
  <Order>
    <OrderNumber>ORD-01003-H8M0J</OrderNumber>
    <created>2011-08-16T13:52:48</created>
    <Sub_total>233.9400</Sub_total>
    <Order_total>228.4400</Order_total>
    <oder_tax>2.5000</oder_tax>
    <order_source>The Story</order_source>
    <order_discount>8.0000</order_discount>
    <Products>
      <Product>
        <zon_isbn10>0310591635</zon_isbn10>
        <Quantity>10.0000000000</Quantity>
        <Price>4.0000</Price>
      </Product>
      <Product>
        <zon_isbn10>0310649781</zon_isbn10>
        <Quantity>3.0000000000</Quantity>
        <Price>43.9800</Price>
        <Tax>1.4000</Tax>
        <Product_discount>10.0000</Product_discount>
      </Product>
      <Product>
        <zon_isbn10>031023414X</zon_isbn10>
        <Quantity>4.0000000000</Quantity>
        <Price>20.0000</Price>
        <Tax>1.1000</Tax>
        <Product_discount>8.0000</Product_discount>
      </Product>
    </Products>
    <ShippingAddress>
      <Shipto_Line1>1211 E BADILLO ST</Shipto_Line1>
      <Shipto_Line3>WEST COVINA CA 91790</Shipto_Line3>
      <postal>91790</postal>
    </ShippingAddress>
    <MailingAddress></MailingAddress>
  </Order>

ORD-01003-H8M0J
2011-08-16T13:52:48
233.9400
228.4400
2.5000
故事
8
0310591635
10
4
0310649781
3
43.9800
1.4000
10
031023414X
4
20
1.1000
8
巴迪洛街东1211号
加利福尼亚州西科维纳91790
91790
但我需要的输出是,它应该显示在订单作为订单标题的基本细节如下所示,我尝试了所有不同的方式,但我错过了一些东西,如果有人可以帮助这将是伟大的

<message>
  <Order>
<orderheader>
    <OrderNumber>ORD-01003-H8M0J</OrderNumber>
    <created>2011-08-16T13:52:48</created>
    <Sub_total>233.9400</Sub_total>
    <Order_total>228.4400</Order_total>
    <oder_tax>2.5000</oder_tax>
    <order_source>The Story</order_source>
    <order_discount>8.0000</order_discount>
</orderheader>
    <Products>
      <Product>
        <zon_isbn10>0310591635</zon_isbn10>
        <Quantity>10.0000000000</Quantity>
        <Price>4.0000</Price>
      </Product>
      <Product>
        <zon_isbn10>0310649781</zon_isbn10>
        <Quantity>3.0000000000</Quantity>
        <Price>43.9800</Price>
        <Tax>1.4000</Tax>
        <Product_discount>10.0000</Product_discount>
      </Product>
      <Product>
        <zon_isbn10>031023414X</zon_isbn10>
        <Quantity>4.0000000000</Quantity>
        <Price>20.0000</Price>
        <Tax>1.1000</Tax>
        <Product_discount>8.0000</Product_discount>
      </Product>
    </Products>
    <ShippingAddress>
      <Shipto_Line1>1211 E BADILLO ST</Shipto_Line1>
      <Shipto_Line3>WEST COVINA CA 91790</Shipto_Line3>
      <postal>91790</postal>
    </ShippingAddress>
    <MailingAddress></MailingAddress>
  </Order>

Thanks in advance

ORD-01003-H8M0J
2011-08-16T13:52:48
233.9400
228.4400
2.5000
故事
8
0310591635
10
4
0310649781
3
43.9800
1.4000
10
031023414X
4
20
1.1000
8
巴迪洛街东1211号
加利福尼亚州西科维纳91790
91790
提前谢谢

您可以将orderheader中所需项目的别名写为“orderheader/created”,以此类推,以获得所需的输出

SELECT
so.OrderNumber as 'orderheader/OrderNumber',
so.createdon As 'orderheader/created',
so.totallineitemamount As 'orderheader/Sub_total',
so.totalamount as 'orderheader/Order_total',
...
将产生如下输出:

<orderheader>
    <OrderNumber>something</OrderNumber>
    <created>something</created>
    <Sub_total>something</Sub_total>
    <Order_total>something</Order_total>
</orderheader>

某物
某物
某物
某物

我需要在ssis包中使用此xml作为源,以便xml源将所有标记划分为一个输出,以减少输出的数量。我希望将这些详细信息放在订单标题下,这样我就不需要再次单独拆分它们,并将它们同时放在订单标题下