Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

SqlXmlBulkLoad

$
0
0
Доброго времени суток,

Решил помучать 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" и есть значения после)

Пошел пока гуглить, где то я видимо не дочитал факинг мануал

Viewing all articles
Browse latest Browse all 7251