2015-05-27 37 views
0

我使用VBScript來執行XMLBulkLoad到SQL Server 2008中 我上傳由以下觸發:XSD驗證問題做xmlbulkload時到SQL Server 2008

objBL.execute "schedules.xsd", "scheduletest.xml" 

這是正確觸發。然而,當我嘗試使用我的架構上傳的是,我得到的錯誤:

XML SAX Parser: Data mapping to column 'ActivityID' was already found in the data. Make sure that no two schema definitions map to the same column.

的數據放進去,如果我更改架構使用<xs:choice>標籤,但隨後這些標籤內的任何不進入表中只有兩行生成,沒有ActivityID,沒有開始和沒有結束 - 所有都是NULL。

我需要這些標記中的任何內容來生成數據庫中的新行,其值與之前相同。所以我目前的測試XML,它會產生:

booking-date,   employee-id, level, planning-unit-id, activity-id, time-end,    time-start, 
2015-05-02 00:00:00, 1345,   8000, 1001,    2,    2015-05-02 20:30:00, 2015-05-02 13:00:00 
2015-05-02 00:00:00, 1345,   8000, 1001,    1053,   2015-05-02 12:00:00, 2015-05-02 07:00:00 
2015-05-01 00:00:00, 1350,   8000, 1001,    1053,   2015-05-01 11:00:00, 2015-05-01 07:00:00 

我想我需要改變我的XSD允許這一點,但我根本無法看到。有什麼建議麼?

我的XSD是:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> 
    <xs:element name="schedules" sql:is-constant="true"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="schedule" maxOccurs="unbounded" minOccurs="0" sql:relation="Merge_Schedule"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:dateTime" name="booking-date" sql:field="bookingdate" sql:datatype="dateTime"/> 
       <xs:element type="xs:integer" name="employee-id" sql:field="EmployeeID" sql:datatype="int"/> 
       <xs:element type="xs:integer" name="level" sql:field="LevelID" sql:datatype="int"/> 
       <xs:element type="xs:integer" name="planning-unit-id" sql:field="PlanningUnitID" sql:datatype="int"/> 
       <xs:element name="schedule-blocks" sql:is-constant="true"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="schedule-block" sql:is-constant="true"> 
         <xs:complexType> 
         <xs:sequence> 
        <!-- <xs:choice maxOccurs="unbounded" minOccurs="0"> --> 
          <xs:element type="xs:integer" name="activity-id" sql:field="ActivityID" sql:datatype="int"/> 
          <xs:element type="xs:dateTime" name="time-end" sql:field="finish" sql:datatype="dateTime"/> 
          <xs:element type="xs:dateTime" name="time-start" sql:field="start" sql:datatype="dateTime"/> 
        <!-- </xs:choice> --> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

我的XML是:

<?xml version="1.0" encoding="UTF-8"?> 
<schedules type="array"> 
    <schedule> 
     <booking-date type="date">2015-05-02 00:00:00</booking-date> 
     <employee-id type="integer">1345</employee-id> 
     <level type="integer">8000</level> 
     <planning-unit-id type="integer">1001</planning-unit-id> 
     <schedule-blocks type="array"> 
      <schedule-block> 
       <activity-id>2</activity-id> 
       <time-end>2015-05-02 20:30:00</time-end> 
       <time-start>2015-05-02 13:00:00</time-start> 
      </schedule-block> 
      <schedule-block> 
       <activity-id>1053</activity-id> 
       <time-end>2015-05-02 12:00:00</time-end> 
       <time-start>2015-05-02 07:00:00</time-start> 
      </schedule-block> 
     </schedule-blocks> 
    </schedule> 
    <schedule> 
     <booking-date type="date">2015-05-01 00:00:00</booking-date> 
     <employee-id type="integer">1350</employee-id> 
     <level type="integer">8000</level> 
     <planning-unit-id type="integer">1001</planning-unit-id> 
     <schedule-blocks type="array"> 
      <schedule-block> 
       <activity-id>1053</activity-id> 
       <time-end>2015-05-01 11:00:00</time-end> 
       <time-start>2015-05-01 07:00:00</time-start> 
      </schedule-block> 
     </schedule-blocks> 
    </schedule> 
</schedules> 

回答

0

,我發現這個問題的唯一答案是XML轉換成更易於管理的文件批量上傳。