Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Загрузка XML заметка sql:relationship  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Добрый день!

Делаю загрузку из XML так, как тут Примеры массовой загрузки XML (SQLXML 4.0).
+ Образец входящего файла XML


<ROOT>
<mail_date>2011-06-23T00:00:00</mail_date>
<mail_partner>Иванов И.И.</mail_partner>
<mail_partner_code>123</mail_partner_code>
<doc doc_number="1">
<doc_num>1</doc_num>
<doc_time>1900-01-01T13:15:57</doc_time>
<doc_type> 17</doc_type>
</doc>
<doc doc_number="2">
<doc_num>2</doc_num>
<doc_time>1900-01-01T14:40:10</doc_time>
<doc_type> 11</doc_type>
</doc>
<doc doc_number="3">
<doc_num>3</doc_num>
<doc_time>1900-01-01T16:23:34</doc_time>
<doc_type> 17</doc_type>
</doc>
<doc doc_number="4">
<doc_num>4</doc_num>
<doc_time>1900-01-01T16:24:01</doc_time>
<doc_type> 15</doc_type>
</doc>
</ROOT>

+ Необходимо получить плоскую таблицу

idmail_datemail_partnermail_partner_codedoc_numdoc_timedoc_type
12011-06-23 00:00:00.000Иванов И.И.12311900-01-01 13:15:57.00017
22011-06-23 00:00:00.000Иванов И.И.12321900-01-01 14:40:10.00011
32011-06-23 00:00:00.000Иванов И.И.12331900-01-01 16:23:34.00017
42011-06-23 00:00:00.000Иванов И.И.12341900-01-01 16:24:01.00015


+ Я написал такую XSD схему


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="ROOT" sql:relation="[dbo].[docs]">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="mail_date" type="xsd:dateTime" sql:field="mail_date"/>
<xsd:element name="mail_partner" type="xsd:string" sql:field="mail_partner"/>
<xsd:element name="mail_partner_code" type="xsd:string" sql:field="mail_partner_code"/>
<xsd:element name="doc" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="doc_num" type="xsd:int" sql:field="doc_num"/>
<xsd:element name="doc_time" type="xsd:dateTime" sql:field="doc_time"/>
<xsd:element name="doc_type" type="xsd:string" sql:field="doc_type"/>
</xsd:sequence>
<xsd:attribute name="doc_number" sql:hide="true"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Получаю сообщение об ошибке
---------------------------
Windows Script Host
---------------------------
Script: D:\Temp\New Folder\ValidateAndBulkload.vbs
Line: 17
Char: 3
Error: Schema: relationship expected on 'doc'.
Code: 8000FFFF
Source: Schema mapping

---------------------------
OK
---------------------------

Не могу сообразить, как написать заметку sql:relationship, если у элемента "doc" нет никакой ссылки на родительский элемет, кроме того, что он находится внутри него?

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1765.0 (X64) Feb 2 2011 17:33:22 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
+ На вякий скипт создания таблицы

IF OBJECT_ID(N'[dbo].[docs]', N'U') IS NOT NULL
    DROP TABLE [dbo].[docs]
GO

CREATE TABLE [dbo].[docs](
    id                INT          IDENTITY
  , mail_date         DATETIME     NULL
  , mail_partner      VARCHAR(100) NULL
  , mail_partner_code VARCHAR(100) NULL
  , doc_num           INT          NULL
  , doc_time          DATETIME     NULL
  , doc_type          VARCHAR(100) NULL
)
GO
11 июл 11, 08:17    [10953648]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка XML заметка sql:relationship  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Пробовал еще sql:key-fields (пример Б.). Но куда бы я его не ставил, получаю все тоже сообщение об ошибке Error: Schema: relationship expected on 'doc'.
11 июл 11, 09:23    [10953824]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка XML заметка sql:relationship  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Guf
Необходимо получить плоскую таблицу:
idtmail_datetmail_partnertmail_partner_codetdoc_numtdoc_timetdoc_type
1t2011-06-23 00:00:00.000tИванов И.И.t123t1t1900-01-01 13:15:57.000t17
2t2011-06-23 00:00:00.000tИванов И.И.t123t2t1900-01-01 14:40:10.000t11
3t2011-06-23 00:00:00.000tИванов И.И.t123t3t1900-01-01 16:23:34.000t17
4t2011-06-23 00:00:00.000tИванов И.И.t123t4t1900-01-01 16:24:01.000t15
И сразу проблемы. Вы хоть о типах нормальных форм слышали?
У вас должно быть две таблицы и XML считывается в них превосходно. И если вам надо получить развёрнутый вариант напишите запрос (view) к этим 2м таблицам.
14 июл 11, 06:18    [10971030]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить