我已经读过: 将XML数据切入SQL Server数据库列的最佳方法寻找一个很好的散装插入XML切碎示例,用于SQL 2005.

我要发布的原因的区别在于我正在使用Biztalk 2009和SQL 2008。

我使用BizTalk从供应商那里接收巨大的XML结构。客户端已将XML结构标准化为MS/SQL Server 2008数据库中的约30个表。

有魔术解决方案吗?

在我看来,这些是选择:

1)BizTalk SQL适配器仅适用于简单的平面数据库(不多的连接和一对一的关系)。

2)编写WCF程序a)使用LINQ并公开LINQ对象b)使用传统的XML DOM或SAX解析并构建Ado.net将存储存储在数据库中

3)编写一个使用打开/XML的复杂存储的proc。

4)将数据库临时存储在SQL/XML列中,然后使用其他一些工具来“切碎和标准化”数据。 SSI中有什么可以这样做的吗?

5)将数据保留在XML列中,并使用XML索引,并且永远不会使其正常化。在视图中嵌入丑陋的Xquery/XPath语句。不确定响应时间或查询是否足够。产生Xqueries和观点可能需要尽可能长的时间,就像在上面执行其他步骤之一一样。

我猜想,#2或#3至少需要每张表至少一个或两个小时,因此,如果我们有30张表,至少30个(如果不是60小时)的各种乏味的无聊和易于错误的工作。

谢谢,

尼尔·沃尔特斯(Neal Walters)

更新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本身并不能阻止您使用SSIS进行切碎或处理XML之类的事实。


以下评论太长了:

XML源有一个问题要注意。考虑一个XML结构,例如:

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

通过XML源处理此操作的结果将是两个输出:一个输出,一个带有attr1和attr2的输出,另一个带有attrc1和atterc2。输出均相互异步处理。您需要通过SSIS会引入的人造列来巩固父母和子行。每个父母都有一个ID列,每个孩子都具有与“外键”相同的ID值。您可能需要在数据库中进行一些工作才能匹配两者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top