구문 분석/파쇄 거대한 복잡한 XML에서 SQL Server 2008 데이터베이스 (30+ 테이블)

StackOverflow https://stackoverflow.com/questions/1876925

문제

나는 이미 이것을 읽었다 : XML 데이터를 SQL Server 데이터베이스 열로 파쇄하는 가장 좋은 방법 그리고 SQL 2005 용 좋은 벌크 삽입 XML 파쇄 예제를 찾고 있습니다..

내가 게시하는 이유의 차이점은 Biztalk 2009와 SQL 2008을 사용하고 있다는 것입니다.

Biztalk를 사용하여 공급 업체로부터 거대한 XML 구조를 받고 있습니다. 클라이언트는 MS/SQL Server 2008 데이터베이스에서 XML 구조를 약 30 개의 테이블로 정규화했습니다.

아직 마법 솔루션이 있습니까?

나에게 이것들은 옵션입니다.

1) Biztalk SQL 어댑터는 간단한 플랫 데이터베이스에만 적합합니다 (많은 조인 및 일대일 관계가 아님).

2) WCF 프로그램 작성 a) LINQ를 사용하고 LINQ 객체를 노출하십시오.

3) Open/XML을 사용하는 복잡한 저장 Proc를 작성하십시오.

4) 데이터베이스를 SQL/XML 열에 임시로 저장 한 다음 다른 도구를 사용하여 데이터를 "파쇄하고 정규화"하십시오. SSI에 이것을 할 것이 있습니까?

5) 데이터를 XML 열에두고 XML 지수를 사용하고 정상화하지 마십시오. 견해에 못생긴 xquery/xpath 문장을 포함시킵니다. 응답 시간이나 쿼리가 적절한 지 확실하지 않습니다. Xqueries와보기를 생성하는 데 시간이 오래 걸릴 수 있습니다.

나는 #2 또는 #3에 테이블 당 최소 1 ~ 2 시간이 걸릴 것이라고 생각합니다. 따라서 30 개의 테이블이있는 경우 다양한 지루한 지루하고 오류가 발생하기 쉬운 작업의 30 개 (60 시간이 아닌 경우).

감사,

닐 월터스

업데이트 12/23 : 일부 샘플 데이터 :

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

"MainstreetValuation"을 볼 수있는 곳에서는 멋진 물건이있는 가정에서 전체 구조가 다른 "HighValuevaluation"과 같은 몇 가지 다른 복잡한 유형 일 수도 있습니다.

도움이 되었습니까?

해결책

빠른 참고 : Biztalk 2009를 사용하고 있다는 사실은 그 자체로는 XML을 파쇄하거나 처리하는 데 SSI와 같은 것을 사용하지 못하게합니다.


다음은 댓글을 달기에는 너무 길다.

XML 소스에 대해 알아야 할 문제가 있습니다. 다음과 같은 XML 구조를 고려하십시오.

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

XML 소스를 통해이를 처리 한 결과는 하나의 출력이 될 것입니다 : 하나는 ATT1과 ATTR2, 다른 하나는 ATTC1 및 ATTC2를 사용합니다. 출력은 모두 서로에 대해 비동기 적으로 처리됩니다. SSIS가 소개 할 인공 칼럼을 통해 부모와 어린이 행을 검열해야합니다. 각 부모는 ID 열이 있으며 각 어린이는 "외국 키"와 동일한 ID 값을 갖습니다. 이 둘과 일치하려면 데이터베이스에서 약간의 작업을 수행해야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top