Я не знаком с SQLXMLBulkload, но вот мои мысли:
Я не уверен, есть ли какая-либо связь между смежными элементами TextLine
и BreakPoint
. Если предположить, что нет, то простейшим решением может быть использование XSLT для преобразования схемы и данных, чтобы исключить необходимость в choice
.
Обратите внимание, что я вставил maxOccurs="unbounded"
в оба элемента. Если это не работает, есть альтернативный подход, который должен работать; см. ниже.
<xs:complexType>
<xs:sequence>
<xs:element name="TextLine" type="xs:string" sql:field="AdvertLine" sql:relation="XmlAdvert" sql:relationship="XmlAdvert" maxOccurs="unbounded"/>
<xs:element name="BreakPoint" sql:is-constant="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Эквивалентный XML будет:
<Advert>
<AdvertText>
<TextLine>Isuzu 4 X 4TRUCKMAN</TextLine>
<TextLine>2.0TD, Red, 5 dr, 60,000 miles, MOT, 5 SEATER</TextLine>
<TextLine>£2500</TextLine>
<TextLine>01234 567890</TextLine>
<BreakPoint />
<BreakPoint />
<BreakPoint />
</AdvertText>
</Advert>
Но, насколько я знаю, SQLXMLBulkload тоже не понравится. В этом случае, основываясь только на вашем примере XML, я бы поспорил, что он примет это:
с соответствующим XML-кодом:
<Advert>
<AdvertText>
<TextLines>
<TextLine>Isuzu 4 X 4TRUCKMAN</TextLine>
<TextLine>2.0TD, Red, 5 dr, 60,000 miles, MOT, 5 SEATER</TextLine>
<TextLine>£2500</TextLine>
<TextLine>01234 567890</TextLine>
</TextLines>
<BreakPoints>
<BreakPoint />
<BreakPoint />
<BreakPoint />
</BreakPoints>
</AdvertText>
</Advert>
Это все еще оставляет открытым вопрос о том, как написать XSLT, который вам нужен, но, возможно, это начало.