Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 xml bulk load, с параметром SchemaGen = True  [new]
anton_05102012
Member

Откуда:
Сообщений: 3
Всем добрый день.
Есть файл DataStructure.XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" elementFormDefault="qualified">
  <xs:element name="MICEX_DOC"  sql:is-constant="1">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="SECURITY" maxOccurs ="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="SECURITY">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="RECORDS" maxOccurs ="unbounded" />
      </xs:sequence>
      <xs:attribute name="SecurityId" type="xs:string" use="required"/>
      <xs:attribute name="SecShortName" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="RECORDS">
    <xs:complexType>
      <xs:attribute name="RecNo" type="xs:integer" use="required"/>
      <xs:attribute name="TradeNo" type="xs:integer" use="required"/>
      <xs:attribute name="TradeDate" type="xs:dateTime" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>


А также файл XMLData.xml:
<?xml version="1.0" encoding="windows-1251"?>
<MICEX_DOC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SECURITY SecurityId="LKOH" SecShortName="ЛУКОЙЛ ао">
    <RECORDS RecNo="1" TradeNo="1456734633" TradeDate="2012-07-26"/>
    <RECORDS RecNo="2" TradeNo="1467846663" TradeDate="2012-07-26"/>
    <RECORDS RecNo="3" TradeNo="1248546011" TradeDate="2012-07-26"/>
    <RECORDS RecNo="4" TradeNo="1345656619" TradeDate="2012-07-26"/>
    <RECORDS RecNo="5" TradeNo="1356563758" TradeDate="2012-08-01"/>
    <RECORDS RecNo="6" TradeNo="1356445743" TradeDate="2012-08-01"/>
    <RECORDS RecNo="7" TradeNo="1375635603" TradeDate="2012-08-01"/>
    <RECORDS RecNo="8" TradeNo="1345654377" TradeDate="2012-08-01"/>
    <RECORDS RecNo="9" TradeNo="3565354652" TradeDate="2012-08-01"/>
  </SECURITY>
  <SECURITY SecurityId="GAZP" SecShortName="ГАЗПРОМ ао">
    <RECORDS RecNo="10" TradeNo="1425634633" TradeDate="2012-07-26"/>
    <RECORDS RecNo="11" TradeNo="1463573663" TradeDate="2012-07-26"/>
    <RECORDS RecNo="12" TradeNo="1224577011" TradeDate="2012-07-26"/>
    <RECORDS RecNo="13" TradeNo="2345656619" TradeDate="2012-07-26"/>
    <RECORDS RecNo="14" TradeNo="1452463758" TradeDate="2012-08-01"/>
  </SECURITY>
</MICEX_DOC>


При запуске скрипта:
Dim objBL 
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload")
objBL.ConnectionString = "provider=SQLOLEDB;data source=.\SQLEXPRESS;database=TEMPDB;integrated security=SSPI"
objBL.ErrorLogFile = "errors.log"

objBL.CheckConstraints=False
objBL.XMLFragment = True
objBL.SchemaGen = True
objBL.SGDropTables = True


objBL.Execute "DataStructure.xsd", "XMLData.xml"
Set objBL = Nothing


Возникает ошибка Windows Script Host:
Schema: relationship expected on 'RECORDS'
Что и логично, ибо не заданы связи.

В звязи с этим возникает вопрос: возможно ли изменив только файл структуры "DataStructure.xsd" получить на выходе создание двух таблиц вида:
SecurityId	SecShortName	SEC_ID
LKOH	ЛУКОЙЛ ао	1
GAZP	ГАЗПРОМ ао	2

и
RecNo	TradeNo	TradeDate	SEC_ID
1	1456734633	2012-07-26	1
2	1467846663	2012-07-26	1
3	1248546011	2012-07-26	1
4	1345656619	2012-07-26	1
5	1356563758	2012-08-01	1
6	1356445743	2012-08-01	1
7	1375635603	2012-08-01	1
8	1345654377	2012-08-01	1
9	3565354652	2012-08-01	1
10	1425634633	2012-07-26	2
11	1463573663	2012-07-26	2
12	1224577011	2012-07-26	2
13	2345656619	2012-07-26	2
14	1452463758	2012-08-01	2
где SEC_ID - автоматически заполняемый ключ.

Либо же создание одной таблицы вида:
RecNo	TradeNo	TradeDate	SecurityId	SecShortName
1	1456734633	2012-07-26	LKOH	ЛУКОЙЛ ао
2	1467846663	2012-07-26	LKOH	ЛУКОЙЛ ао
3	1248546011	2012-07-26	LKOH	ЛУКОЙЛ ао
4	1345656619	2012-07-26	LKOH	ЛУКОЙЛ ао
5	1356563758	2012-08-01	LKOH	ЛУКОЙЛ ао
6	1356445743	2012-08-01	LKOH	ЛУКОЙЛ ао
7	1375635603	2012-08-01	LKOH	ЛУКОЙЛ ао
8	1345654377	2012-08-01	LKOH	ЛУКОЙЛ ао
9	3565354652	2012-08-01	LKOH	ЛУКОЙЛ ао
10	1425634633	2012-07-26	GAZP	ГАЗПРОМ ао
11	1463573663	2012-07-26	GAZP	ГАЗПРОМ ао
12	1224577011	2012-07-26	GAZP	ГАЗПРОМ ао
13	2345656619	2012-07-26	GAZP	ГАЗПРОМ ао
14	1452463758	2012-08-01	GAZP	ГАЗПРОМ ао

Спасибо.
5 окт 12, 15:09    [13274489]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Вы самое главное не сделали. Вы не прописали в XSD аннотацию - связь нодов в таблицами и связи между таблицами.
5 окт 12, 16:37    [13275311]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Ба, да вы даже таблицы не создали.
5 окт 12, 16:38    [13275316]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
В качестве примера: 12410359
5 окт 12, 16:40    [13275326]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
anton_05102012
Member

Откуда:
Сообщений: 3
Спасибо, то что надо!
5 окт 12, 17:54    [13275855]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
Ба, да вы даже таблицы не создали.
SchemaGen = True
Да, создаёт таблицы, но
Всё равно нужна аннотация, и чем полнее она будет, тем правильнее создадутся таблицы, с нужными типами.
Вот только не знаю, ключи создаются ли?
5 окт 12, 18:01    [13275884]     Ответить | Цитировать Сообщить модератору
 Re: xml bulk load, с параметром SchemaGen = True  [new]
anton_05102012
Member

Откуда:
Сообщений: 3
Mnior,
Очень помогли, спасибо.
Сегодня закончил загрузку данных...

С SchemaGen = True, решил не связываться, создал таблицы как в приведенном примере.
7 окт 12, 00:13    [13279131]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить