Загрузка иерархических документов

Если у вас имеется иерархический документ, и вам необходимо его загрузить с сохранением родительско-дочерних связей, этот пример – для вас. В нем создается две таблицы: родительская test1 и дочерняя test2. Самое сложное при этом – написать правильную аннотированную схему.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ms="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name="test-table1" ms:relation="test1"> <xsd:complexType> <xsd:sequence> <xsd:element name="test-table2" ms:relation="test2"> <xsd:annotation> <xsd:appinfo> <ms:relationship parent="test1" parent-key="test1_id" child="test2" child-key="test1_id" /> </xsd:appinfo> </xsd:annotation> <xsd:complexType> <xsd:attribute name="identifier" ms:datatype="int" ms:field="test2_id"/> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="identifier" ms:datatype="int" ms:field="test1_id"/> <xsd:attribute name="field1" ms:datatype="int" ms:field="fld1"/> </xsd:complexType> </xsd:element></xsd:schema>

Скрипт (написан на vbs):

Dim xbcp,adoStreamSet xbcp = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.3.0")Set adoStream = CreateObject ("ADODB.Stream") adoStream.OpenadoStream.WriteText "<ROOT>" & _ "<test-table1 identifier='10' field1='345'>" & _ "<test-table2 identifier='1' />" & _ "</test-table1>" & _ "</ROOT>"AdoStream.Position = 0 xbcp.ConnectionString = "Provider=sqloledb.1;Data Source=server;" & _ "database=pubs;User ID=user;Password=password;" xbcp.SchemaGen = truexbcp.SGDropTables = truexbcp.Transaction = truexbcp.ErrorLogFile = "c:\error.log"xbcp.TempFilePath = "c:\temp" xbcp.Execute "xbcp_schema.xml",adoStream

После его выполнения будут созданы следующие таблицы.

test1_id field1
   

Таблица test1.

test1_id test2_id
   

Таблица test2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: