powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Связать 2 таблицы в схеме для BulkLoad
9 сообщений из 9, страница 1 из 1
Связать 2 таблицы в схеме для BulkLoad
    #33423477
Henrie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, кто в курсе, Есть XML файл:
<?xml version="1.0" encoding="windows-1251"?>
<MOD>
<Таблицы>
<Таблица1>
<ID>00001280000214028</ID>
<Столбец1>Периодический</Столбец1>
</Таблица1>
<Таблица1>
<ID>00001280000213524</ID>
<Столбец1>Периодический<Периодический ДатаЗнач="25.02.05">5</Периодический>
<Периодический ДатаЗнач="02.03.05">5</Периодический>
<Периодический ДатаЗнач="11.03.05">5</Периодический>
</Столбец1>
</Таблица1>
<Таблица1>
<ID>00001280000214026</ID>
<Столбец1>Периодический<Периодический ДатаЗнач="24.02.05">6</Периодический>
<Периодический ДатаЗнач="26.02.05">6</Периодический>
<Периодический ДатаЗнач="02.03.05">6</Периодический>
<Периодический ДатаЗнач="10.03.05">6</Периодический>
<Периодический ДатаЗнач="11.03.05">6</Периодический>
</Столбец1>
</Таблица1>
<Таблица1>
<ID>00001280000214027</ID>
<Столбец1>Периодический<Периодический ДатаЗнач="24.02.05">6</Периодический>
<Периодический ДатаЗнач="02.03.05">6</Периодический>
<Периодический ДатаЗнач="10.03.05">6</Периодический>
<Периодический ДатаЗнач="11.03.05">6</Периодический>
</Столбец1>
</Таблица1>
</Таблицы>
</MOD>
Данные из него нужно загрузить в 2 таблицы:
Tab1 (Id varchar(20)) - родительская таблица и
Tab2 (Id varchar(20),
val int,
dat varchar(10)) - дочерняя таблица, причем одной записи в Tab1 может соответствовать 2 и более записи в Tab2
Для закачки данных при помощи SQL BulkLoad написал схему:

<?xml version="1.0" encoding="windows-1251"?>
<!--XML-Data generated by XMLSPY v2004 rel. 3 U (http://www.xmlspy.com)-->
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="MOD" sql:is-constant="1">
<element type="Таблицы"/>
</ElementType>

<ElementType name="ID" dt:type="i8"/>
<ElementType name="Периодический" dt:type="i1">
<AttributeType name="ДатаЗнач" dt:type="enumeration"/>
<attribute type="ДатаЗнач" sql:field="dat"/>
</ElementType>
<ElementType name="Столбец1" sql:relation="Tab2">
<element type="Периодический" sql:field="val"/>
</ElementType>
<ElementType name="Таблица1" sql:relation="Tab1">
<element type="ID" sql:field="ID"/>
<element type="Столбец1">
<sql:relationship
key-relation="Tab1"
key="ID"
foreign-key="ID"
foreign-relation="Tab2"/>
</element>
</ElementType>
<ElementType name="Таблицы" sql:is-constant="1">
<element type="Таблица1"/>
</ElementType>
</Schema>
при запуске выдает ошибку на столбец dat. Может что в relationship не так?
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33426882
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где код?
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33427308
Henrie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.3.0")
objBL.ConnectionString ="provider=SQLOLEDB;data source=localhost;database=Database;uid=sa;pwd="
objBL.SchemaGen = True
objBL.SGDropTables = True
objBL.Execute "e:\XML\11\sch.xml", "e:\XML\11\tab.xml"
set objBL=Nothing
вот код - тут все в порядке - другие XML без определения связей закачивает запросто, да и в этом примере, если изменитить слегка структуру источника данных (Элемент "Переодический" объявить как атрибут "Столбца1") и соответстветствующим образом изменить схему - загружает нормально - создает обе таблицы и данные корректно сажает. Но мне нужно, чтобы все работало именно по этой структуре
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33427651
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что в итоге должно быть в tab2?
Я правильно понял, что в поле dat должна быть конкат. строка?
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33427781
Henrie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, в tab2 первым атрибутом дожен быть идентификатор из tab1 (id) , val-значение элемента "Переодический" (число), dat - значение атрибута "ДатаЗнач" (т.е. обычная дата, но в строковом виде)
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33428858
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал, не получилось. Я бы преобразовал входной XML в иной формат всё же.

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33429771
Henrie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я это понимаю, что дефект во входном XML -файле, но изменить ничего не могу - мне они в таком формате приходят. Нашел временный выход через overflow columns, но тоже жуткое извращение. Может есть какой способ перестраивать входной файл стазу по нормальной схеме, а потом грузить данные?
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33429799
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HenrieМожет есть какой способ перестраивать входной файл стазу по нормальной схеме, а потом грузить данные?

Именно это я вам и предложил сделать - преобразовать полученный XML ДО загрузки при помощи XSLT.
...
Рейтинг: 0 / 0
Связать 2 таблицы в схеме для BulkLoad
    #33430150
Henrie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет, попытаюсь
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Связать 2 таблицы в схеме для BulkLoad
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]