Domanda

Ho letto questo già: il modo migliore per distruggere i dati XML in colonne di database di SQL Server e Alla ricerca di un buon inserimento di massa XML triturazione esempio per SQL 2005 .

Le differenze del perché sto postando è che sto utilizzando BizTalk 2009 e SQL 2008.

Sto ricevendo un enorme struttura XML da un fornitore utilizzando BizTalk. Il cliente si è normalizzata la struttura XML in circa 30 tabelle su un database MS / SQL Server 2008.

C'è qualche soluzione magica ancora?

Sembra che per me queste sono le opzioni:

1) BizTalk Adapter SQL solo un bene per semplici database piatti (non un sacco di join e uno-a-molti).

2) Scrivere un programma WCF     a) utilizzare LINQ ed esporre l'oggetto LINQ     b) utilizzare tradizionale DOM XML o SAX parsing e costruire ADO.NET per memorizzare nel database

3) stored procedure complesse che utilizza Apri / XML.

4) Conservare il database temporaneo in una colonna SQL / XML, quindi utilizzare un altro strumento per "triturare e normalizzare" i dati. C'è qualcosa in SSIS che farebbe questo?

5) Lasciare i dati in una colonna XML, e utilizzare gli indici XML e non normalizzarlo. Incorporare le dichiarazioni XQuery / Xpath brutti in vista. Non sono sicuro se il tempo di risposta o domande sarebbero adeguati. Potrebbe richiedere del tempo per generare i xqueries e viste come sarebbe per fare uno degli altri punti di cui sopra.

Sto indovinando che # 2 o # 3 sarebbero voluti almeno una o due ore per ogni tabella, quindi se abbiamo 30 tavoli, almeno il 30 (se non 60 ore) di vario noioso noioso e lavoro soggetto a errori.

Grazie,

Neal Walters

Aggiornamento 12/23: Alcuni dati di esempio:

 <ns0:ValAgg xmlns:va="http://msbinfo.com/expresslync/rct/valuation" xmlns:ns0="http://TFBIC.RCT.BizTalk.Orchestrations.ValAgg">
- <MainStreetValuation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://msbinfo.com/expresslync/rct/valuation">
<ValuationIdentifier>
  <RecordId>1928876</RecordId> 
  <PolicyNumber>ESTIMATE-1928876</PolicyNumber> 
  <VersionId>6773220</VersionId> 
  </ValuationIdentifier>
  <RecordType>EST</RecordType> 
  <PolicyStatus>Complete</PolicyStatus> 
  <DataSource>WEB</DataSource> 
   <bunch more here/> 
<valuationAggregateFlat xmlns="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <policyNumber>ESTIMATE-1928876</policyNumber> 
  <recordId>1928876</recordId> 
  <versionId>6773220</versionId> 
  <updateTimeStamp>2009-12-14T14:50:30.743</updateTimeStamp> 
  <replacementCost>166129</replacementCost> 
  <yearBuilt>1999</yearBuilt> 
  <totalLivingAreaSqFt>2000</totalLivingAreaSqFt> 
  <primaryRCTRoofTypeCode>15012</primaryRCTRoofTypeCode> 
  <TOPSRoofType>COPR</TOPSRoofType> 
  <StdFireRoofType>COPR</StdFireRoofType> 
  <primaryRTCConstructionTypeCode>10016</primaryRTCConstructionTypeCode> 
  <constructionType>BV</constructionType> 
  <hailProofIndicator>false</hailProofIndicator> 
  <anyWoodRoofIndicator>false</anyWoodRoofIndicator> 
  <allMetalRoofIndicator>true</allMetalRoofIndicator> 
  </valuationAggregateFlat>
</ns0:ValAgg>

Dove si vede "MainStreetValuation" potrebbe anche essere un paio di altri tipi complessi, come ad esempio "HighValueValuation" in cui l'intera struttura è diversa per le case che hanno cose fantasiose.

È stato utile?

Soluzione

Nota rapida:. Il fatto che si sta utilizzando BizTalk 2009 non, di per sé, vi impedisce di usare qualcosa di simile anche SSIS per la triturazione e dell'elaborazione XML


Il seguente è troppo lungo per un commento:

C'è un problema di essere a conoscenza con l'Origine XML. Prendere in considerazione una struttura XML come:

<root>
    <parent attr1="value1" attr2="value2">
        <child attrc1="valuec1" attrc2="valuec2"/>
        <child attrc1="valuec1" attrc2="valuec2"/>
    </parent>
    <parent> ... </parent>
    ...
</root>

Il risultato di questa elaborazione attraverso l'Origine XML saranno due uscite: una con attr1 e attr2, e un altro con attrc1 e attrc2. Le uscite degli elaborazione asincrona rispetto all'altro. Avrai bisogno di corollate le righe padre e figlio per mezzo di una colonna artificiale che SSIS introdurrà. Ogni genitore avrà una colonna id, e ogni bambino avrà lo stesso valore di id come una "chiave esterna". Potrebbe essere necessario fare un po 'di lavoro nel database per abbinare i due.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top