2013-11-26 85 views
2

这是我的客户端提供的XML文件的要点。文件被命名为Rep [yr] [mo]。我尝试使用Visual Studio生成的模式将数据上载到我的数据库中,但它一直告诉我某些节点缺少引用,无论我做了什么。有什么建议?将多个XML文件导入到远程SQL Server表中

<xml> 
<reports> 
    <report name="Report 1"> 
     <client id="Client 1"> 
      <stat stat_id="client_stats"> 
       <monthStats>0</monthStats> 
       <yearStats>0</yearStats> 
      </stat > 
     </client> 
     <client id="Client 2"> 
      <stat stat_id="client_stats"> 
       <monthStats>0</monthStats> 
       <yearStats>0</yearStats> 
      </stat > 
     </client> 
    </report> 
    <report name="Report 2"> 
     <client id="Client 1"> 
      <stat stat_id="client_stats"> 
       <monthStats>0</monthStats> 
       <yearStats>0</yearStats> 
      </stat > 
     </client> 
     <client id="Client 2"> 
      <stat stat_id="client_stats"> 
       <monthStats>0</monthStats> 
       <yearStats>0</yearStats> 
      </stat > 
     </client> 
    </report> 
</reports> 
</xml> 

下面是生成的模式:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  attributeFormDefault="unqualified" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 
<xs:element name="xml"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="reports" sql:is-constant="true"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="report" minOccurs="0" maxOccurs="unbounded"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="client" minOccurs="0" maxOccurs="unbounded"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="stat" minOccurs="0"> 
                <xs:complexType> 
                 <xs:sequence> 
                  <xs:element name="monthStats" type="xs:decimal" minOccurs="0" sql:field="monthStats"/> 
                  <xs:element name="yearStats" type="xs:decimal" minOccurs="0" sql:field="yearStats"/> 
                 </xs:sequence> 
                 <xs:attribute name="stat_id" type="xs:string" use="optional" sql:field="stat_id"/> 
                </xs:complexType> 
               </xs:element> 
              </xs:sequence> 
              <xs:attribute name="id" type="xs:unsignedShort" use="optional" sql:field="clientID"/> 
             </xs:complexType> 
            </xs:element> 
           </xs:sequence> 
           <xs:attribute name="name" type="xs:string" use="optional" sql:field="reportName"/> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

而且我想这个VBS导入:

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.4.0") 
objBL.ConnectionString = "Provider=SQLOLEDB; Data Source=[source];Initial Catalog=[database];User ID='[id]';Password='[pw]'" 
objBL.ErrorLogFile = "[path]" 
objBL.Execute "[the xsd]", "[xml file]" 
Set objBL = Nothing 

Dim strPathToSchema As String = "c:\path\FileName.xsd" 
Dim strPathToData As String = "c:\path\FileName.xml" 
Dim dtXMLData As New DataTable() 

dtXMLData.ReadXMLSchema(strPathToSchema) 
dtXMLData.ReadXML(strPathToData) 

但我得到的错误:架构:关系预期'报告'

客户的最初目标是将一切都放在一张巨大的桌子上,但如果您有任何身份证件为了更好的结构化,它将非常感谢!

回答

0

我建议你使用SSIS将XML文档导入SQL Server数据库。最初将其导入单独的表中,然后使用导入的表数据将数据插入/删除/更新到其他表中。另外,您可以将一个巨大的表中的everthing与使用sql查询并加入并插入到语句中。

下面是关于如何import xml document using SSIS

希望帮助更多的信息。