powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML BulkLoad - Генерация ключей
8 сообщений из 8, страница 1 из 1
XML BulkLoad - Генерация ключей
    #33613997
krech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, как сделать схему, чтоб при загрузке создались дополнительные поля (PK) и в них понагенерировались значения ключей.

Структуру я не хочу создавать вручную, пусть автоматом делается Bulkload-ом.

т.е. из xml вида

<t1>
<f1>"Пупков-задний"</f1>
<t2>
<f2>"размер противогаза - 4"</f2>
</t2>
</t1>

создалась структура

T1(f1,pk) :
"Пупков-задний", 1

T2(f2,fk1) :
"размер противогаза - 4", 1


//Пытаемся поднять базу налоговой ЕГРЮЛ из XML
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33615368
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krech... как сделать схему, чтоб при загрузке создались дополнительные поля (PK) и в них понагенерировались значения ключей.
...

тынц

Модератору: по-моему пора этот вопрос в FAQ помещать?
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33616128
krech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что же помещать в faq, спрашивается? В Вашем тынц про отношения по сложном ключу, это я уже изучил. А мне нужно чтобы ключ создался сам, так как его нет в данных. Пример: XMLSpy берет да и содает поля с названиями ParentKey и ForeignKey и лупит туда значения, то есть СОЗДАЕТ ключевые поля, да еще и ПИШЕТ туда identities.

Может это и не решается, я накопал как это обойти, но уперся в проблему закачки атрибутов из элементов типа sql:is-constant. Может кто знает как это сделать?
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33642010
staya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если использовать namespace xmlns:sql="urn:schemas-microsoft-com:mapping-schema", то схема может выглядеть примерно так:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>

<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="t1tot2" parent="t1" parent-key="t1_id" child="t2" child-key="t2_id"/>
</xsd:appinfo>
</xsd:annotation>

<xsd:element name="t1" sql:relation="t1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="t1_id" minOccurs="0" sql:identity="ignore"/>
<xsd:element name="f1"/>

<xsd:element name="t2" sql:relation="t2"
sql:relationship="t1tot2"
sql:key-fields="t2_id" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="t2_id" minOccurs="0" sql:identity="ignore"/>
<xsd:element name="f2" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

</xsd:element>

</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

При этом автоматически будут генерироваться ключи t1_id и t2_id для дочерней и родительской таблиц.
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33643106
staya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет генерации t2_id с помощью XMLBulkLoad я, пожалуй, погорячилась. Его достаточно сделать identity в таблице. Если структура двух таблиц такая:

CREATE TABLE t1 (
t1_id int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
f1 varchar(255)
)
GO

CREATE TABLE t2(
t2_id int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
t1_id int NOT NULL ,
f2 varchar(255)
)
GO

то схему xsd для XMLBulkLoad можно использовать такую:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>

<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="t1tot2" parent="t1" parent-key="t1_id" child="t2" child-key="t1_id"/>
</xsd:appinfo>
</xsd:annotation>

<xsd:element name="t1" sql:relation="t1" sql:key-fields="t1_id">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="t1_id" type="xsd:int" sql:identity="ignore"/>
<xsd:element name="f1" type="xsd:string"/>

<xsd:element name="t2" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="f2" type="xsd:string" sql:relation="t2"
sql:relationship="t1tot2"/>
</xsd:sequence>
</xsd:complexType>

</xsd:element>

</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

При этом элемент f2 в xml-данных можно повторять (т.е. делать несколько дочерних записей):
<t1>
<f1>"Сидоров"</f1>
<t2>
<f2>"размер противогаза - 1"</f2>
<f2>"размер противогаза - 2"</f2>
<f2>"размер противогаза - 3"</f2>
<f2>"размер противогаза - 4"</f2>
</t2>
</t1>

Но если во второй таблице полей больше, чем одно+ключ, xsd несколько изменится. Впрочем, как и сам xml - придется обрамлять каждую запись внутри t2 в отдельные теги.
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33646474
krech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое. Мне, правда, не подходил вариант с созданием таблиц вручную. И я вышел из положения так: написал прогу, которая все нужные теги прошила уникальным ключом. А потом затянул их балклоадом.
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33647209
staya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблицы можно не создавать вручную, а просто указать SchemaGen = True при закачке данных через объект SQLXMLBulkLoad. При этом они создадутся автоматически на основе xsd.
...
Рейтинг: 0 / 0
XML BulkLoad - Генерация ключей
    #33962785
dimong2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to staya

Не работает Ваш пример...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML BulkLoad - Генерация ключей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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