Question

Je lis ce déjà: la meilleure façon de déchiqueter des données XML dans les colonnes de base de données SQL Server et Vous cherchez une bonne insertion en bloc XML exemple râpe pour les SQL 2005 .

Les différences des raisons pour lesquelles je poste est que j'utilise BizTalk 2009 et SQL 2008.

Je reçois une énorme structure XML à partir d'un fournisseur à l'aide de BizTalk. Le client a normalisé la structure XML dans environ 30 tables sur une base de données MS / SQL Server 2008.

Y at-il encore de solution magique?

On dirait que pour moi, ce sont les options:

1) adaptateur SQL BizTalk seulement bon pour les bases de données simples plats (pas un grand nombre de jointures et un à-plusieurs).

2) Ecrire un programme WCF     a) utiliser LINQ et exposer l'objet LINQ     b) utiliser DOM XML traditionnel ou l'analyse syntaxique SAX et construire ADO.NET pour stocker dans la base de données

3) Ecrire un complexe Proc stockée qui utilise Open / XML.

4) Stockez la base de données temporairement dans une colonne SQL / XML, utilisez un autre outil pour « déchiqueter et normaliser » les données. il quelque chose dans SSIS Est-ce serait faire cela?

5) Laissez les données dans une colonne XML et utiliser des indices XML et ne jamais normaliser. Intégrer les déclarations laides XQuery / XPath dans une vue. Je ne sais pas si le temps de réponse ou des requêtes seraient suffisantes. Pourrait prendre plus de temps pour générer les XQueries et vues comme il le ferait de faire l'une des autres étapes ci-dessus.

Je devine que # 2 ou # 3 prendrait au moins une ou deux heures par table, donc si nous avons 30 tables, au moins 30 (voire 60 heures) de divers ennuyeux fastidieux et travail sujette aux erreurs.

Merci,

Neal Walters

Mise à jour 12/23: Quelques exemples de données:

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

Si vous voyez « MainStreetValuation » pourrait aussi être un ou deux autres types complexes, tels que « HighValueValuation » où toute la structure est différente pour les maisons qui ont des choses extravagantes.

Était-ce utile?

La solution

Note rapide:. Le fait que vous utilisez BizTalk 2009 n'a pas, par lui-même, vous empêcher de l'utiliser également quelque chose comme SSIS pour le broyage et autres traitement du XML


Ce qui suit est trop long pour un commentaire:

Il y a un problème à être au courant de la source XML. Considérons une structure XML comme:

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

Le résultat du traitement par ce la source XML sera deux sorties: l'une avec attr1 et attr2, et une autre avec attrc1 et attrc2. Les sorties sont toutes traitées de manière asynchrone par rapport à l'autre. Vous aurez besoin de corollate les lignes parent et enfant au moyen d'une colonne artificielle qui SSIS présentera. Chaque parent aura une colonne id, et chaque enfant aura le même identifiant comme une « clé étrangère ». Vous devrez peut-être faire un peu de travail dans votre base de données pour les deux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top