2015-03-26 7 views
0

У меня есть проблемы с экспортом данных из нашей базы данных в XML. Я, наверное, над головой, поскольку у меня нет более ранних знаний XML, но, как бы тяжело это ни было:Sql Server 2008R2 Экспорт XML

Мы уже отправляем эти данные через лист Excel, но теперь клиент хочет его как 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> 

Для листа первенствовать у меня есть SQL proceedure, который производит один большой стол со всеми вышеперечисленными данными, где <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') 

Как я может получить каждый столбец для конкретной строки, чтобы произвести свой собственный тег с приписанными значениями?

В качестве второго вопроса я также получил схему XSD для этого XML-файла от клиента. Может ли это использоваться для форматирования данных, экспортированных из моей базы данных, в соответствии с их требуемым XML-файлом?

ответ

0

Если вы хотите вложить цену в корзину в sprProduct, введите псевдоним выбранного столбца 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 

На практике суб-выбирает бы присоединиться к исходной таблицы к себе на первичный ключ для того, чтобы иметь возможность получить доступ к столбцы в одной и той же строке, что и внешний выбор.

+0

Как насчет файла XSD? Это то, что я должен использовать для экспорта? – fish

+0

Вы * можете * использовать XSD с XML-данными SQL Server, но это не то, что я сделал. Вы можете начать с [Сборки XML-схем] (https://msdn.microsoft.com/en-us/library/ms187856.aspx) в документах SQL Server и задать другой вопрос, если вы застряли. –

Смежные вопросы