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

+
<ETHNOPRICE>
<HOTEL NAME="Bridge Resort" TYPE="гостиница" REGION="Краснодарский край" CITY="Сочи" RESORT="Адлер" ID="4019">
<ROOM DESC="Стандарт">
<TYPE DESC="Ценовой период (завтрак)"/>
<MEAL CODE="BB" DESC="Завтрак"/>
<ACCMD DESC="2 взрослых"/>
<ACCMD DESC="1-местное размещение"/>
<ACCMD DESC="доп место НЕТТО"/>
<PRICES>
<PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
<PRICE VALUE="4600" MEAL="BB"/>
<PRICE VALUE="4050" MEAL="BB"/>
<PRICE VALUE="1150" MEAL="BB"/>
</PRICELINE>
<PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
<PRICE VALUE="12000" MEAL="BB"/>
<PRICE VALUE="10000" MEAL="BB"/>
<PRICE VALUE="2000" MEAL="BB"/>
</PRICELINE>
<PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
<PRICE VALUE="4600" MEAL="BB"/>
<PRICE VALUE="4050" MEAL="BB"/>
<PRICE VALUE="1150" MEAL="BB"/>
</PRICELINE>
</PRICES>
</ROOM>
<ROOM DESC="Стандарт">
<TYPE DESC="Ценовой период (завтрак/ужин)"/>
<MEAL CODE="HB" DESC="Полупансион"/>
<ACCMD DESC="2 взрослых"/>
<ACCMD DESC="1-местное размещение"/>
<PRICES>
<PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
<PRICE VALUE="5900" MEAL="HB"/>
<PRICE VALUE="4700" MEAL="HB"/>
</PRICELINE>
<PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
<PRICE VALUE="13300" MEAL="HB"/>
<PRICE VALUE="10650" MEAL="HB"/>
</PRICELINE>
<PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
<PRICE VALUE="5900" MEAL="HB"/>
<PRICE VALUE="4700" MEAL="HB"/>
</PRICELINE>
</PRICES>
</ROOM>

</HOTEL>
</ETHNOPRICE>


Схема
+
<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="HotelRooms"
parent="xml_tourethno_price_hotels"
parent-key="ID dummy"
child="xml_tourethno_price_rooms"
child-key="ID dummy"
/>

</xsd:appinfo>
</xsd:annotation>

<xsd:element name="ETHNOPRICE" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>

<xsd:element name="HOTEL" minOccurs="0" maxOccurs="1"
sql:relation="xml_tourethno_price_hotels"
sql:key-fields="ID"
sql:overflow-field="OverflowColumn"
>
<xsd:complexType>

<xsd:sequence>

<xsd:element name="ROOM" minOccurs="0" maxOccurs="unbounded"
sql:relation="xml_tourethno_price_rooms"
sql:relationship="HotelRooms"
sql:overflow-field="OverflowColumn"
>
<xsd:complexType>

<xsd:sequence>

<xsd:element name="TYPE" minOccurs="1" maxOccurs="1" sql:field="[TYPE]">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string" >
<xsd:attribute name="DESC" type="xsd:string" sql:datatype="nvarchar(512)" sql:field="[TYPE]"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

<xsd:element name="MEAL" minOccurs="1" maxOccurs="1" sql:field="[MEAL]">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string" >
<xsd:attribute name="CODE" type="xsd:string" sql:datatype="nvarchar(16)" sql:field="[MEAL]"/>
<xsd:attribute name="DESC" type="xsd:string" sql:datatype="nvarchar(16)" sql:field="[MEAL_DESC]"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>


<xsd:element name="PRICES" minOccurs="1" maxOccurs="1" type="xsd:string" sql:datatype="xml"/>

</xsd:sequence>

<xsd:attribute name="dummy" type="xsd:int" default="0"/>
<xsd:attribute name="DESC" type="xsd:string" use="required" sql:field="ROOMID"/>

</xsd:complexType>
</xsd:element>

</xsd:sequence>

<xsd:attribute name="dummy" type="xsd:int" default="0"/>
<xsd:attribute name="ID" type="xsd:int" use="required"/>
<xsd:attribute name="RESORT" type="xsd:string" use="required"/>
<xsd:attribute name="CITY" type="xsd:string" use="required"/>
<xsd:attribute name="REGION" type="xsd:string" use="required"/>
<xsd:attribute name="TYPE" type="xsd:string" use="required" sql:field="[TYPE]"/>
<xsd:attribute name="NAME" type="xsd:string" use="required"/>

</xsd:complexType>
</xsd:element>

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

</xsd:schema>

, но загрузить <ACCMD и <PRICES удается только в XML-поля. Для последующего разбора.
Я их даже в отдельные таблицы не смог загрузить - бред ибо.

Но может это я торможу?
21 янв 16, 14:01    [18710743]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
В каком виде нужно данные распарсить? Поскольку Ваш вопрос не совсем ясно поставлен.
21 янв 16, 14:39    [18711007]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
aleks2
Guest
Чо ж тут непонятного? ACCMD и PRICE_VALUE надоть согласовать "по порядку следования".

<ROOM DESC="Стандарт">
<TYPE DESC="Ценовой период (завтрак)"/>
<MEAL CODE="BB" DESC="Завтрак"/>
<ACCMD DESC="2 взрослых"/>
<ACCMD DESC="1-местное размещение"/>
<ACCMD DESC="доп место НЕТТО"/>
<PRICES>
<PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
<PRICE VALUE="4600" MEAL="BB"/>
<PRICE VALUE="4050" MEAL="BB"/>
<PRICE VALUE="1150" MEAL="BB"/>
</PRICELINE>
<PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
<PRICE VALUE="12000" MEAL="BB"/>
<PRICE VALUE="10000" MEAL="BB"/>
<PRICE VALUE="2000" MEAL="BB"/>
</PRICELINE>
<PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
<PRICE VALUE="4600" MEAL="BB"/>
<PRICE VALUE="4050" MEAL="BB"/>
<PRICE VALUE="1150" MEAL="BB"/>
</PRICELINE>
</PRICES>
</ROOM>

в девять строчек:
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)

(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)

(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
(ROOM_DESC, TYPE_DESC, MEAL_CODE, ACCMD_DESC, DATEBEG, DATEEND, PRICE_VALUE)
21 янв 16, 19:06    [18712799]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @xml XML = '
<ROOM DESC="Стандарт">
    <TYPE DESC="Ценовой период (завтрак)"/>
    <MEAL CODE="BB" DESC="Завтрак"/>
    <ACCMD DESC="2 взрослых"/>
    <ACCMD DESC="1-местное размещение"/>
    <ACCMD DESC="доп место НЕТТО"/>
    <PRICES>
        <PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
            <PRICE VALUE="4600" MEAL="BB"/>
            <PRICE VALUE="4050" MEAL="BB"/>
            <PRICE VALUE="1150" MEAL="BB"/>
        </PRICELINE>
        <PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
            <PRICE VALUE="12000" MEAL="BB"/>
            <PRICE VALUE="10000" MEAL="BB"/>
            <PRICE VALUE="2000" MEAL="BB"/>
        </PRICELINE>
        <PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
            <PRICE VALUE="4600" MEAL="BB"/>
            <PRICE VALUE="4050" MEAL="BB"/>
            <PRICE VALUE="1150" MEAL="BB"/>
        </PRICELINE>
    </PRICES>
</ROOM>'

SELECT t.ROOM_DESC, t.TYPE_DESC, t.MEAL_CODE, t2.ACCMD_DESC, t.DATEBEG, t.DATEEND, t.PRICE_VALUE
FROM (
    SELECT *, RowNum = DENSE_RANK() OVER (ORDER BY t.DATEBEG, t.DATEEND)
    FROM (
        SELECT
            ROOM_DESC = t.c.value('@DESC', 'NVARCHAR(50)'),
            TYPE_DESC = t.c.value('TYPE[1]/@DESC', 'NVARCHAR(50)'),
            MEAL_CODE = t.c.value('MEAL[1]/@DESC', 'NVARCHAR(50)'),
            DATEBEG = t2.c2.value('@DATEBEG', 'VARCHAR(50)'),
            DATEEND = t2.c2.value('@DATEEND', 'VARCHAR(50)'),
            PRICE_VALUE = t3.c3.value('@VALUE', 'INT'),
            X = t.c.query('.')
        FROM @xml.nodes('ROOM') t(c)
        CROSS APPLY t.c.nodes('PRICES/PRICELINE') t2(c2)
        CROSS APPLY t2.c2.nodes('PRICE') t3(c3)
    ) t
) t
CROSS APPLY (
    SELECT 
        ACCMD_DESC = t3.c3.value('@DESC', 'NVARCHAR(50)'),
        RowNum = ROW_NUMBER() OVER (ORDER BY 1/0)
    FROM X.nodes('ROOM/ACCMD') t3(c3)
) t2
WHERE t.RowNum = t2.RowNum

ROOM_DESC    TYPE_DESC                    MEAL_CODE    ACCMD_DESC               DATEBEG      DATEEND     PRICE_VALUE
------------ ---------------------------- ------------ ------------------------ ------------ ----------- -----------
Стандарт     Ценовой период (завтрак)     Завтрак      2 взрослых               01.01.15     04.10.15    1150
Стандарт     Ценовой период (завтрак)     Завтрак      доп место НЕТТО          13.10.15     30.12.15    4600
Стандарт     Ценовой период (завтрак)     Завтрак      2 взрослых               01.01.15     04.10.15    4600
Стандарт     Ценовой период (завтрак)     Завтрак      1-местное размещение     05.10.15     12.10.15    10000
Стандарт     Ценовой период (завтрак)     Завтрак      доп место НЕТТО          13.10.15     30.12.15    1150
Стандарт     Ценовой период (завтрак)     Завтрак      1-местное размещение     05.10.15     12.10.15    12000
Стандарт     Ценовой период (завтрак)     Завтрак      доп место НЕТТО          13.10.15     30.12.15    4050
Стандарт     Ценовой период (завтрак)     Завтрак      2 взрослых               01.01.15     04.10.15    4050
Стандарт     Ценовой период (завтрак)     Завтрак      1-местное размещение     05.10.15     12.10.15    2000


если скорость не критична, то вот такой вариант. Если все же скорость важна, то можно подумать как упростить.
21 янв 16, 19:45    [18712980]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
aleks2
Guest
Спасиба канешно.
Тока XQuery я и сам писать умею.
Мине бы через SqlXmlBulkLoad.
21 янв 16, 19:56    [18713012]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Спорить конечно не буду, но тогда поправьте меня... почему в топике SQL Server?
И почему именно нужно делать через SQLXMLBulkLoad?

Заранее спасибо.
21 янв 16, 20:04    [18713045]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
aleks2
Guest
AlanDenton
Спорить конечно не буду, но тогда поправьте меня... почему в топике SQL Server?
И почему именно нужно делать через SQLXMLBulkLoad?

Заранее спасибо.


Потому что, их много и оне большие. А мне сервер жалко.

И хде ж про SqlXmlBulkLoad спрашивать то?
21 янв 16, 20:14    [18713069]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
ВВС
Все мозги разбил на части, все извилины заплел,
И канатчиковы власти колят нам второй укол.

Схему придется генерить заранее
+
USE [tempdb];
go
drop table
  dbo.Prices,
  dbo.Pricelines,
  dbo.Acmds,
  dbo.Rooms,
  dbo.RoomTyps,
  dbo.Meals,
  dbo.Hotels;
go
CREATE TABLE [dbo].[Hotels](
  [hotel_id] [int] NOT NULL,
  [nam] [nvarchar](1000) NOT NULL,
  [typ] [nvarchar](1000) NOT NULL,
  [reg] [nvarchar](1000) NOT NULL,
  [city] [nvarchar](1000) NOT NULL,
  [resort] [nvarchar](1000) NOT NULL,
  CONSTRAINT [Hotels_pk_1] PRIMARY KEY CLUSTERED ([hotel_id])
);
CREATE TABLE [dbo].[RoomTyps](
  [roomtyp_id] [int] identity(1,1) NOT NULL,
  [dsc] [nvarchar](60) NOT NULL,
  CONSTRAINT [RoomTyps_pk_1] PRIMARY KEY CLUSTERED([roomtyp_id])
);
CREATE TABLE [dbo].[Meals](
  [meal_id] [int] identity(1,1) NOT NULL,
  [meal_cod] [nchar](2) NOT NULL,
  [dsc] [nvarchar](30) NOT NULL,
  CONSTRAINT [Meals_pk_1] PRIMARY KEY CLUSTERED ([meal_id] ASC)
);
CREATE TABLE [dbo].[Rooms](
  [hotel_id] [int] NULL,
  [room_id] [int] identity(1,1) NOT NULL,
  [roomtyp_id] [int] NULL,
  [meal_id] [int] NULL,
  [dsc] [nvarchar](30) NOT NULL,
  CONSTRAINT [Rooms_pk_1] PRIMARY KEY CLUSTERED([room_id])
);
ALTER TABLE [dbo].[Rooms] WITH CHECK
  ADD CONSTRAINT [Rooms_fk_1] FOREIGN KEY([hotel_id])
  REFERENCES [dbo].[Hotels] ([hotel_id]);
ALTER TABLE [dbo].[Rooms] WITH CHECK
  ADD CONSTRAINT [Rooms_fk_2] FOREIGN KEY([roomtyp_id])
  REFERENCES [dbo].[RoomTyps] ([roomtyp_id]);
ALTER TABLE [dbo].[Rooms] WITH CHECK
  ADD CONSTRAINT [Rooms_fk_3] FOREIGN KEY([meal_id])
  REFERENCES [dbo].[Meals] ([meal_id]);
CREATE TABLE [dbo].[Acmds](
  [room_id] [int] NULL,
  [acmd_id] [int] identity(1,1) NOT NULL,
  [dsc] [nvarchar](50) NOT NULL,
  CONSTRAINT [Acmds_pk_1] PRIMARY KEY CLUSTERED ([acmd_id])
);
ALTER TABLE [dbo].[Acmds] WITH CHECK
  ADD CONSTRAINT [Acmds_fk_1] FOREIGN KEY([room_id])
  REFERENCES [dbo].[Rooms] ([room_id]);
CREATE TABLE [dbo].[Pricelines](
  [room_id] [int] NULL,
  [priceline_id] [int] identity(1,1) NOT NULL,
  [beg] [nchar](8) NOT NULL,
  [fin] [nchar](8) NOT NULL,
  CONSTRAINT [Pricelines_pk_1] PRIMARY KEY CLUSTERED ([priceline_id])
);
ALTER TABLE [dbo].[Pricelines] WITH CHECK
  ADD CONSTRAINT [Pricelines_fk_1] FOREIGN KEY([room_id])
  REFERENCES [dbo].[Rooms] ([room_id]);
CREATE TABLE [dbo].[Prices](
  [priceline_id] [int] NULL,
  [price_id] [int] identity(1,1) NOT NULL,
  [price] [int] NOT NULL,
  [meal_cod] [nchar](2) NOT NULL,
  CONSTRAINT [Prices_pk_1] PRIMARY KEY CLUSTERED ([price_id] ASC)
);
ALTER TABLE [dbo].[Prices] WITH CHECK
  ADD CONSTRAINT [Prices_fk_1] FOREIGN KEY([priceline_id])
  REFERENCES [dbo].[Pricelines] ([priceline_id]);

А потом грузить (далее powershell)
+
cls
$xm=@'
<?xml version="1.0" encoding="utf-8"?>
<ETHNOPRICE>
  <HOTEL
    NAME="Bridge Resort"
    TYPE="гостиница"
    REGION="Краснодарский край"
    CITY="Сочи"
    RESORT="Адлер"
    ID="4019">
    <ROOM DESC="Стандарт">
      <TYPE DESC="Ценовой период (завтрак)"/>
      <MEAL CODE="BB" DESC="Завтрак"/>
      <ACCMD DESC="2 взрослых"/>
      <ACCMD DESC="1-местное размещение"/>
      <ACCMD DESC="доп место НЕТТО"/>
      <PRICES>
        <PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
          <PRICE VALUE="4600" MEAL="BB"/>
          <PRICE VALUE="4050" MEAL="BB"/>
          <PRICE VALUE="1150" MEAL="BB"/>
        </PRICELINE>
        <PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
          <PRICE VALUE="12000" MEAL="BB"/>
          <PRICE VALUE="10000" MEAL="BB"/>
          <PRICE VALUE="2000" MEAL="BB"/>
        </PRICELINE>
        <PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
          <PRICE VALUE="4600" MEAL="BB"/>
          <PRICE VALUE="4050" MEAL="BB"/>
          <PRICE VALUE="1150" MEAL="BB"/>
        </PRICELINE>
      </PRICES>
    </ROOM>
    <ROOM DESC="Стандарт">
      <TYPE DESC="Ценовой период (завтрак/ужин)"/>
      <MEAL CODE="HB" DESC="Полупансион"/>
      <ACCMD DESC="2 взрослых"/>
      <ACCMD DESC="1-местное размещение"/>
      <PRICES>
        <PRICELINE DATEBEG="01.01.15" DATEEND="04.10.15">
          <PRICE VALUE="5900" MEAL="HB"/>
          <PRICE VALUE="4700" MEAL="HB"/>
        </PRICELINE>
        <PRICELINE DATEBEG="05.10.15" DATEEND="12.10.15">
          <PRICE VALUE="13300" MEAL="HB"/>
          <PRICE VALUE="10650" MEAL="HB"/>
        </PRICELINE>
          <PRICELINE DATEBEG="13.10.15" DATEEND="30.12.15">
          <PRICE VALUE="5900" MEAL="HB"/>
          <PRICE VALUE="4700" MEAL="HB"/>
        </PRICELINE>
      </PRICES>
    </ROOM>
  </HOTEL>
</ETHNOPRICE>
'@
$xs=@'
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:msd="urn:schemas-microsoft-com:xml-msdata"
  xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
  elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:annotation>
    <xs:appinfo>
      <sql:relationship name="R2H"
        parent="Hotels"
        parent-key="hotel_id"
        child-key="hotel_id"
        child="Rooms"/>
    </xs:appinfo>
    <xs:appinfo>
      <sql:relationship name="R2T"
        parent="Rooms"
        parent-key="roomtyp_id"
        child-key="roomtyp_id"
        child="RoomTyps"
        inverse="1"/>
    </xs:appinfo>
    <xs:appinfo>
      <sql:relationship name="R2M"
        parent="Rooms"
        parent-key="meal_id"
        child-key="meal_id"
        child="Meals"
        inverse="1"/>
    </xs:appinfo>
    <xs:appinfo>
      <sql:relationship name="A2R"
        parent="Rooms"
        parent-key="room_id"
        child-key="room_id"
        child="Acmds"/>
    </xs:appinfo>
    <xs:appinfo>
      <sql:relationship name="PL2R"
        parent="Rooms"
        parent-key="room_id"
        child-key="room_id"
        child="Pricelines"/>
    </xs:appinfo>
    <xs:appinfo>
      <sql:relationship name="P2PL"
        parent="Pricelines"
        parent-key="priceline_id"
        child-key="priceline_id"
        child="Prices"/>
    </xs:appinfo>
    <!--xs:appinfo>
      <sql:relationship name="P2M"
        parent="Meals"
        parent-key="meal_id"
        child-key="meal_id"
        child="Prices"/>
    </xs:appinfo-->
  </xs:annotation>
  <xs:element name="ETHNOPRICE" sql:is-constant="1">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HOTEL"
          sql:relation="Hotels" sql:key-fields="hotel_id">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ROOM" maxOccurs="unbounded"
                sql:relation="Rooms" sql:key-fields="room_id"
                sql:relationship="R2H">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TYPE"
                      sql:relation="RoomTyps" sql:key-fields="roomtyp_id"
                      sql:relationship="R2T">
                      <xs:complexType>
                      <xs:attribute name="roomtyp_id" type="xs:int"
                        sql:field="roomtyp_id" sql:identity="ignore"
                        msd:AutoIncrement="1" msd:ReadOnly="1"/>
                        <xs:attribute name="DESC"
                          type="xs:string" use="required"
                          sql:field="dsc" sql:datatype="nvarchar(60)"/>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="MEAL"
                      sql:relation="Meals" sql:key-fields="meal_id"
                      sql:relationship="R2M">
                      <xs:complexType>
                        <xs:attribute name="meal_id" type="xs:int"
                          sql:field="meal_id" sql:identity="ignore"
                          msd:AutoIncrement="1" msd:ReadOnly="1"/>
                        <xs:attribute name="CODE"
                          type="xs:string" use="required"
                          sql:field="meal_cod" sql:datatype="nchar(2)"/>
                        <xs:attribute name="DESC"
                          type="xs:string" use="required"
                          sql:field="dsc" sql:datatype="nvarchar(30)"/>
                      </xs:complexType>
                    </xs:element>
                    <xs:element maxOccurs="unbounded" name="ACCMD"
                      sql:relation="Acmds" sql:key-fields="acmd_id"
                      sql:relationship="A2R">
                      <xs:complexType>
                        <xs:attribute name="acmd_id" type="xs:int"
                          sql:field="acmd_id" sql:identity="ignore"
                          msd:AutoIncrement="1" msd:ReadOnly="1"/>
                        <xs:attribute name="DESC"
                          type="xs:string" use="required"
                          sql:field="dsc" sql:datatype="nvarchar(50)"/>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="PRICES" sql:is-constant="1">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="PRICELINE" maxOccurs="unbounded"
                            sql:relation="Pricelines" sql:key-fields="priceline_id"
                            sql:relationship="PL2R">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="PRICE" maxOccurs="unbounded"
                                  sql:relation="Prices" sql:key-fields="price_id"
                                  sql:relationship="P2PL">
                                  <xs:complexType>
                                    <xs:attribute name="price_id" type="xs:int"
                                      sql:field="price_id" sql:identity="ignore"
                                      msd:AutoIncrement="1" msd:ReadOnly="1"/>
                                    <xs:attribute name="VALUE"
                                      type="xs:unsignedShort" use="required"
                                      sql:field="price" sql:datatype="int"/>
                                    <xs:attribute name="MEAL"
                                      type="xs:string" use="required"
                                      sql:field="meal_cod"
                                      sql:datatype="nchar(2)"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attribute name="priceline_id" type="xs:int"
                                sql:field="priceline_id" sql:identity="ignore"
                                msd:AutoIncrement="1" msd:ReadOnly="1"/>
                              <xs:attribute name="DATEBEG"
                               type="xs:string" use="required"
                               sql:field="beg" sql:datatype="nchar(8)"/>
                              <xs:attribute name="DATEEND"
                               type="xs:string" use="required"
                               sql:field="fin" sql:datatype="nchar(8)"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="room_id" type="xs:int"
                    sql:field="room_id" sql:identity="ignore"
                    msd:AutoIncrement="true" msd:ReadOnly="true"/>
                  <xs:attribute name="DESC" type="xs:string" use="required"
                    sql:field="dsc" sql:datatype="nvarchar(30)"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="NAME" type="xs:string" use="required" sql:field="nam"/>
            <xs:attribute name="TYPE" type="xs:string" use="required" sql:field="typ"/>
            <xs:attribute name="REGION" type="xs:string" use="required" sql:field="reg"/>
            <xs:attribute name="CITY" type="xs:string" use="required" sql:field="city"/>
            <xs:attribute name="RESORT" type="xs:string" use="required" sql:field="resort"/>
            <xs:attribute name="ID" type="xs:unsignedShort" use="required"
              sql:field="hotel_id" sql:datatype="int"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
'@
$erroractionpreference='stop'
$fxm='prices.xml'
$fxs=[io.path]::changeextension($fxm,'xsd')
$xm|out-file $fxm -enc utf8
$xs|out-file $fxs -enc utf8
$sxbl=new-object -com sqlxmlbulkload.sqlxmlbulkload.4.0
$sxbl.errorlogfile='err.xml'
$sxbl.checkconstraints=$false
$sxbl.schemagen=$false
$sxbl.sgdroptables=$false
$sxbl.keepidentity=$false
$sxbl.connectionstring=@'
provider=sqlncli11;
data source=lpc:.\mss2014dev;
initial catalog=tempdb;
integrated security=sspi
'@
$sxbl.execute($fxs,$fxm)
write-host done
27 янв 16, 02:48    [18733755]     Ответить | Цитировать Сообщить модератору
 Re: sqlXmlBulkLoad и загрузка продуктов больного воображения. Вновь призываются маги XML  [new]
aleks2
Guest
Да... моя будет изучать это творение. Большое спасибо.
27 янв 16, 10:02    [18734257]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить