2013-11-26 80 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

希望幫助更多的信息。