Frage

Ich habe das schon gelesen: Der beste Weg, um XML -Daten in SQL Server -Datenbankspalten zu zerlegen und Auf der Suche nach einem guten Masseneinsatz XML Shredding -Beispiel für SQL 2005.

Die Unterschiede, warum ich poste, besteht darin, dass ich BizTalk 2009 und SQL 2008 verwende.

Ich erhalte eine riesige XML -Struktur von einem Anbieter mit BizTalk. Der Client hat die XML -Struktur in einer Datenbank MS/SQL Server 2008 in etwa 30 Tabellen normalisiert.

Gibt es schon eine magische Lösung?

Es scheint mir wie die Optionen zu sein:

1) BizTalk SQL-Adapter nur gut für einfache flache Datenbanken (nicht viele Verknüpfungen und Eins-zu-Viele-Beziehungen).

2) Schreiben Sie ein WCF -Programm a) Verwenden

3) Schreiben Sie einen komplex gespeicherten Proc, der Open/XML verwendet.

4) Speichern Sie die Datenbank vorübergehend in einer SQL/XML -Spalte und verwenden Sie dann ein anderes Tool, um die Daten zu "zerkleinern und normalisieren". Gibt es etwas in SSIs, das dies tun würde?

5) Lassen Sie die Daten in einer XML -Spalte und verwenden Sie XML -Indizes und normalisieren Sie sie nie. Einbetten Sie die hässlichen XQuery/XPath -Anweisungen in eine Ansicht ein. Ich bin mir nicht sicher, ob die Antwortzeit oder Abfragen angemessen wären. Könnte so lange dauern, um die Xquerien und Ansichten zu erzeugen, wie es einen der anderen Schritte darüber ausführen würde.

Ich vermute, dass #2 oder #3 mindestens ein oder zwei Stunden pro Tabelle dauern würde. Wenn wir also 30 Tabellen haben, mindestens 30 (wenn nicht 60 Stunden) verschiedener langweiliger und fehleranfälliger Arbeit.

Vielen Dank,

Neal Walters

Aktualisieren Sie 12/23: Einige Beispieldaten:

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

Wo Sie "MainStreetValuation" sehen, könnte auch einige andere komplexe Typen sein, wie z.

War es hilfreich?

Lösung

Kurzer Hinweis: Die Tatsache, dass Sie BizTalk 2009 verwenden, hindert Sie nicht daran, auch so etwas wie SSIs zum Zerkleinern und anderweitig verarbeitet zu verwenden.


Das Folgende ist zu lang für einen Kommentar:

Es gibt ein Problem, das sich mit der XML -Quelle bewusst ist. Betrachten Sie eine XML -Struktur wie:

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

Das Ergebnis der Verarbeitung dieser durch die XML -Quelle ist zwei Ausgänge: eine mit Attr1 und Attr2 und eine mit AttrC1 und Attrc2. Die Ausgänge werden alle asynchron in Bezug aufeinander verarbeitet. Sie müssen die Eltern- und Kinderreihen mithilfe einer künstlichen Spalte, die SSIS einführen wird, corollieren. Jeder Elternteil hat eine ID -Spalte und jedes Kind hat den gleichen ID -Wert wie "Fremdschlüssel". Möglicherweise müssen Sie in Ihrer Datenbank ein wenig arbeiten, um den beiden zu entsprechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top