Sql 服务器 2008R2 XML 导出
Sql Server 2008R2 XML export
我在将数据从我们的数据库导出到 XML 时遇到了一些问题。我可能有点不知所措,因为我之前没有 XML 知识,但是嘿,这有多难:)
我们已经通过 excel sheet 发送此数据,但现在客户希望将其作为 XML 发送。上传到他们的系统后,我可以将其下载为 XML,下面是该文件的一部分,
<?xml version="1.0" encoding="ISO-8859-1"?>
<PricatHead xmlns="xxxxx"
preOrderTo="2015-06-01T23:59:59"
name="15005-3"
merchant="xxxx"
customer="xxxxx"
validFrom="2014-08-01T00:00:00"
validTo="2015-06-01T23:59:59"
currency="SEK"
contractDiscount="0">
<sprProduct itemID="86035-8"
name="xxxx"
description="xxxxxx"
tax="0.00"
eanCode=""
eanType="EAN 13"
color="BLACK"
colorCode="C0100"
size="36"
sizeRange="EURO size"
modelNo="86035"
inSelection="N"
productDiscount="0">
<priceBracket quantity="1"
price="x"
grossPrice="xxxx"
validOrderDateFrom="2014-08-01T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type="PRE"/>
<priceBracket quantity="1"
price="x"
grossPrice="x"
validOrderDateFrom="2015-02-15T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type=""/>
<variantValue name="unit"
value="pcs"/>
<variantValue name="recPrice_SEK"
value="x"/>
<variantValue name="recCampaignPrice_SEK"
value="0"/>
<variantValue name="brand"
value="x"/>
<variantValue name="goodsClass"
value="4052"/>
<variantValue name="recCampaignPriceCurrency"
value="SEK"/>
<variantValue name="recWebPriceCurrency"
value="SEK"/>
<variantValue name="unitType"
value="pcs"/>
<variantValue name="x"
value="2603"/>
<variantValue name="marketingInfo"
value="xxxxx"/>
<variantValue name="preOrderDiscountHQ"
value="0"/>
<variantValue name="grossPriceCurrency"
value="SEK"/>
<variantValue name="productPicture_1"
value="xxx"/>
<variantValue name="suppOrderCurrency"
value="SEK"/>
<variantValue name="preOrderCurrency"
value="SEK"/>
<variantValue name="productPicture_3"
value="xxx"/>
<variantValue name="productPicture_2"
value="xxxx"/>
<variantValue name="invoiceMethod"
value="net"/>
<variantValue name="logisticUnit"
value="cu"/>
<variantValue name="countryOfOrigin"
value="CN"/>
<variantValue name="suppOrderDiscountHQ"
value="0"/>
<variantValue name="customsTariffNo_SE"
value="6402999300"/>
</sprProduct>
对于 excel sheet 我有一个 SQL 程序生成一个大的 table 包含所有上述数据,其中 <sprProduct>
是一行并且其余列。
我可以毫无问题地创建 <pricatHead>
和 <sprProduct>
标签,但是我使用 <priceBracket>
失败了,因为它们也是 select 语句中的列,而且我有多个需要的列他们自己的 <priceBracket>
。
<variantValue>
导致同样的问题。
很难解释,但是一个 sql 行应该产生多个 <priceBracket>
和 <variantValue>
。
到目前为止,我的代码如下所示(已缩短),
--Pricat HEAD
select
PrisLista as [@name]
,gtinMerchant as [@merchant]
,gtinCustomer as [@customer]
--Pricat ROWS
,( select
ar.ArtNr as [@itemID]
,ar.ArtBeskr as [@name]
,ar.ArtBeskrLong as [@description]
,prl.vat as [@tax]
,prl.quantity as [sprProduct/priceBracket/@quantity]
.........
from prl
for xml path ('sprProduct'), type)
from prh
FOR XML PATH ('PricatHead')
如何让特定行的每一列生成自己的带有属性值的标签?
作为第二个问题,我还从客户那里得到了这个 XML 文件的 XSD 架构。这可以用来帮助格式化从我的数据库导出的数据以匹配他们所需的 XML 文件吗?
如果您想将 priceBracket 嵌套在 sprProduct 中,则将 selected XML 列别名为 [sprProduct/priceBracket]
。要创建嵌套节点的属性,请使用 @ 前缀,例如 [sprProduct/priceBracket/@quanity]
.
这是一个示例脚本,展示了如何创建您提到的不同排列。
select
-- row level attributes
1 as [@a],
2 as [@b],
3 as [@c],
-- node level attributes
4 as [sprProduct/@a],
5 as [sprProduct/@b],
6 as [sprProduct/@c],
-- nested section
(select
'a1' as [@a],
'a2' as [@b],
'a3' as [@c]
for xml path ('priceBracket'), type),
-- repeated nested section
(select
'b1' as [@a],
'b2' as [@b],
'b3' as [@c]
for xml path ('priceBracket'), type)
for xml path ('PricatHead'), type
实际上,子 select 会在主键上将您的源 table 连接到自身,以便能够访问与外部 [=19] 在同一行中的列=].
我在将数据从我们的数据库导出到 XML 时遇到了一些问题。我可能有点不知所措,因为我之前没有 XML 知识,但是嘿,这有多难:)
我们已经通过 excel sheet 发送此数据,但现在客户希望将其作为 XML 发送。上传到他们的系统后,我可以将其下载为 XML,下面是该文件的一部分,
<?xml version="1.0" encoding="ISO-8859-1"?>
<PricatHead xmlns="xxxxx"
preOrderTo="2015-06-01T23:59:59"
name="15005-3"
merchant="xxxx"
customer="xxxxx"
validFrom="2014-08-01T00:00:00"
validTo="2015-06-01T23:59:59"
currency="SEK"
contractDiscount="0">
<sprProduct itemID="86035-8"
name="xxxx"
description="xxxxxx"
tax="0.00"
eanCode=""
eanType="EAN 13"
color="BLACK"
colorCode="C0100"
size="36"
sizeRange="EURO size"
modelNo="86035"
inSelection="N"
productDiscount="0">
<priceBracket quantity="1"
price="x"
grossPrice="xxxx"
validOrderDateFrom="2014-08-01T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type="PRE"/>
<priceBracket quantity="1"
price="x"
grossPrice="x"
validOrderDateFrom="2015-02-15T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type=""/>
<variantValue name="unit"
value="pcs"/>
<variantValue name="recPrice_SEK"
value="x"/>
<variantValue name="recCampaignPrice_SEK"
value="0"/>
<variantValue name="brand"
value="x"/>
<variantValue name="goodsClass"
value="4052"/>
<variantValue name="recCampaignPriceCurrency"
value="SEK"/>
<variantValue name="recWebPriceCurrency"
value="SEK"/>
<variantValue name="unitType"
value="pcs"/>
<variantValue name="x"
value="2603"/>
<variantValue name="marketingInfo"
value="xxxxx"/>
<variantValue name="preOrderDiscountHQ"
value="0"/>
<variantValue name="grossPriceCurrency"
value="SEK"/>
<variantValue name="productPicture_1"
value="xxx"/>
<variantValue name="suppOrderCurrency"
value="SEK"/>
<variantValue name="preOrderCurrency"
value="SEK"/>
<variantValue name="productPicture_3"
value="xxx"/>
<variantValue name="productPicture_2"
value="xxxx"/>
<variantValue name="invoiceMethod"
value="net"/>
<variantValue name="logisticUnit"
value="cu"/>
<variantValue name="countryOfOrigin"
value="CN"/>
<variantValue name="suppOrderDiscountHQ"
value="0"/>
<variantValue name="customsTariffNo_SE"
value="6402999300"/>
</sprProduct>
对于 excel sheet 我有一个 SQL 程序生成一个大的 table 包含所有上述数据,其中 <sprProduct>
是一行并且其余列。
我可以毫无问题地创建 <pricatHead>
和 <sprProduct>
标签,但是我使用 <priceBracket>
失败了,因为它们也是 select 语句中的列,而且我有多个需要的列他们自己的 <priceBracket>
。
<variantValue>
导致同样的问题。
很难解释,但是一个 sql 行应该产生多个 <priceBracket>
和 <variantValue>
。
到目前为止,我的代码如下所示(已缩短),
--Pricat HEAD
select
PrisLista as [@name]
,gtinMerchant as [@merchant]
,gtinCustomer as [@customer]
--Pricat ROWS
,( select
ar.ArtNr as [@itemID]
,ar.ArtBeskr as [@name]
,ar.ArtBeskrLong as [@description]
,prl.vat as [@tax]
,prl.quantity as [sprProduct/priceBracket/@quantity]
.........
from prl
for xml path ('sprProduct'), type)
from prh
FOR XML PATH ('PricatHead')
如何让特定行的每一列生成自己的带有属性值的标签?
作为第二个问题,我还从客户那里得到了这个 XML 文件的 XSD 架构。这可以用来帮助格式化从我的数据库导出的数据以匹配他们所需的 XML 文件吗?
如果您想将 priceBracket 嵌套在 sprProduct 中,则将 selected XML 列别名为 [sprProduct/priceBracket]
。要创建嵌套节点的属性,请使用 @ 前缀,例如 [sprProduct/priceBracket/@quanity]
.
这是一个示例脚本,展示了如何创建您提到的不同排列。
select
-- row level attributes
1 as [@a],
2 as [@b],
3 as [@c],
-- node level attributes
4 as [sprProduct/@a],
5 as [sprProduct/@b],
6 as [sprProduct/@c],
-- nested section
(select
'a1' as [@a],
'a2' as [@b],
'a3' as [@c]
for xml path ('priceBracket'), type),
-- repeated nested section
(select
'b1' as [@a],
'b2' as [@b],
'b3' as [@c]
for xml path ('priceBracket'), type)
for xml path ('PricatHead'), type
实际上,子 select 会在主键上将您的源 table 连接到自身,以便能够访问与外部 [=19] 在同一行中的列=].