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

Откуда: Moscow
Сообщений: 1456
Доброго времени суток,

Решил помучать sqlxmlbulkload.

Задача следующего типа: есть таблица
CREATE TABLE tbl_test (
      [rowID] INT IDENTITY(1,1),
      [FileName] VARCHAR(50),
      [File_ID] INT,
      [File_Version] VARCHAR(50),
      [Recepient] VARCHAR(50),
      [Record_ID] INT,
      [Path] VARCHAR(255)
)


есть файлик xml:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<ROOT>
  <FileName>DB_01.dbf</FileName>
  <FileData>
    <ID>1</ID>
    <Version>4.0</Version>
  </FileData>
  <Details Recepient="test">
    <Record ID="1">
      <Path>C:\</Path>
    </Record>
    <Record ID="2">
      <Path>C:\temp\</Path>
    </Record>
  </Details>
</ROOT>


его необходимо загрузить средствами sqlxmlbulkload в виде списка строк: аля
 insert into tbl_test ([FileName], [File_ID], [File_Version], [Recepient], [Record_ID], [Record_Path])
   values ('DB_01.dbf', 1, '4.0', 'test', 1, 'C:\'), ('DB_01.dbf', 1, '4.0', 'test', 2, 'C:\temp')

и.т.д.

и вот здесь ступил на грабли, что-то не пойму средство загрузки не умеет дублировать строки что-ли с значениями предыдущих обработанный узлов xml

Схему нарисовал в таком виде:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xs:element name="ROOT" sql:relation="tbl_test">
    <xs:complexType>
      <xs:sequence>
         <xs:element name="FileName" sql:field="FileName"/>
         <xs:element name="FileData" sql:is-constant="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element name="ID" sql:field="File_ID"/>
                  <xs:element name="Version" sql:field="File_Version"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Details">
            <xs:complexType>
                <xs:sequence>
                  <xs:element name="Record">
                     <xs:complexType>
                       <xs:sequence>
                           <xs:element name="Path" sql:field="Path"/>
                       </xs:sequence>
                       <xs:attribute name="ID" sql:field="Record_ID"/>
                     </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Recepient" sql:field="Recepient"/>
            </xs:complexType>
         </xs:element>
      </xs:sequence>                 
    </xs:complexType>
  </xs:element>
</xs:schema>


Но при загрузке получаю ошибку: Shema: relationship expected on 'Details'
Я бы мог прикрутить туда связку таблицы на саму же себя, но тогда загружается несколько строк в виде:
строка 1: (есть значения до полей тега "Details" и NULL после)
строка 2: (значения null до полей тега "Details" и есть значения после)

Пошел пока гуглить, где то я видимо не дочитал факинг мануал
1 сен 16, 11:01    [19616127]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
почитал повнимательней описание формирования набора записей для отправки на сервер, походу тот функционал который хочу реализовать я недоступен средству массовой загрузки, и необходимо разбивать набор на связанные таблицы.
1 сен 16, 13:29    [19617051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить