Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите составить аннотированную схему для sqlxmlbulkload / 10 сообщений из 10, страница 1 из 1
15.06.2018, 09:29
    #39661086
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
Коллеги, помогите!
просто не могу сообразить, как это описать, хотя вроде всё просто.
Вот хмл, который собираюсь грузить:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<?xml version="1.0" encoding="utf-8"?>
<a>
	<b>
	<code>1</code>
	<ds1>1.11</ds1>
	<ds1>1.12</ds1>
	<ds1>1.13</ds1>
	<ds2>2.11</ds2>
	</b>
	
	<b>
	<code>2</code>	
	<ds1>1.21</ds1>
	<ds1>1.22</ds1>
	<ds2>2.21</ds2>
	<ds2>2.22</ds2>
	</b>
	
	<b>
	<code>3</code>		
	<ds1>1.31</ds1>
	<ds2>2.31</ds2>
	<ds2>2.32</ds2>
	</b>

	<b>
	<code>4</code>		
	<ds2>2.41</ds2>
	</b>
	
</a>


А вот структура, в которую хочу грузить:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Create table b
	([_id_b] int identity(1,1) NOT NULL
	,[code] nvarchar(10) NULL
	,Constraint PK_b primary key clustered ([_id_b])
	)
;
Create table ds
	([_id_ds] int identity(1,1) NOT NULL
	,[_id_b] int NOT NULL
	,[ds] nvarchar(10) NULL
	,[type] smallint not null constraint cs_type check ([type] between 1 and 2)
	,Constraint PK_ds primary key clustered ([_id_ds])
	)


Т.е. все множественные теги ds в одну таблицу, с указанием типа.
Как???
...
Рейтинг: 0 / 0
15.06.2018, 12:59
    #39661236
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
uaggster,

Сорри, что не по теме. Но с чего вдруг
[type] between 1 and 2
и smallint ?
...
Рейтинг: 0 / 0
15.06.2018, 13:03
    #39661240
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
Glebanskiuaggster,

Сорри, что не по теме. Но с чего вдруг
[type] between 1 and 2
и smallint ?
вы за tinyint?
...
Рейтинг: 0 / 0
15.06.2018, 13:35
    #39661248
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
Glebanskiuaggster,

Сорри, что не по теме. Но с чего вдруг
[type] between 1 and 2
и smallint ?
Это ниоткуда не следует. Это по определению. (С)
...
Рейтинг: 0 / 0
15.06.2018, 13:38
    #39661249
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
uaggsterКоллеги, помогите!
просто не могу сообразить, как это описать, хотя вроде всё просто.
Вот хмл, который собираюсь грузить:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<?xml version="1.0" encoding="utf-8"?>
<a>
	<b>
	<code>1</code>
	<ds1>1.11</ds1>
	<ds1>1.12</ds1>
	<ds1>1.13</ds1>
	<ds2>2.11</ds2>
	</b>
	
	<b>
	<code>2</code>	
	<ds1>1.21</ds1>
	<ds1>1.22</ds1>
	<ds2>2.21</ds2>
	<ds2>2.22</ds2>
	</b>
	
	<b>
	<code>3</code>		
	<ds1>1.31</ds1>
	<ds2>2.31</ds2>
	<ds2>2.32</ds2>
	</b>

	<b>
	<code>4</code>		
	<ds2>2.41</ds2>
	</b>
	
</a>


А вот структура, в которую хочу грузить:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Create table b
	([_id_b] int identity(1,1) NOT NULL
	,[code] nvarchar(10) NULL
	,Constraint PK_b primary key clustered ([_id_b])
	)
;
Create table ds
	([_id_ds] int identity(1,1) NOT NULL
	,[_id_b] int NOT NULL
	,[ds] nvarchar(10) NULL
	,[type] smallint not null constraint cs_type check ([type] between 1 and 2)
	,Constraint PK_ds primary key clustered ([_id_ds])
	)


Т.е. все множественные теги ds в одну таблицу, с указанием типа.
Как???

1. Это весьма хреновый вариант XML. Веселый геморрой вам обеспечен.
2. Утилита xsd.exe из комплекта Visual Studio спасет и напишет вам схему. Хотя, буквально вчера, сумрачный гений подкинул мне XML, от которого xsd.exe стошнило.
3. Допилить остальное - попроще будет.
4. Не схему пилят под таблицы, а таблицы под схему.
...
Рейтинг: 0 / 0
15.06.2018, 14:56
    #39661316
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
TaPaK,

Ну вы же не возражаете против nvarchar всего 10.
Значит я за tinyint
...
Рейтинг: 0 / 0
15.06.2018, 15:12
    #39661328
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
aleks2221. Это весьма хреновый вариант XML. Веселый геморрой вам обеспечен.

Да я как бы понимаю.
aleks2222. Утилита xsd.exe из комплекта Visual Studio спасет и напишет вам схему. Хотя, буквально вчера, сумрачный гений подкинул мне XML, от которого xsd.exe стошнило.

Тут проблема не в создании схемы. Ее то я сделать могу.
И даже не в запихивании двух разных тегов в одну таблицу. Это наверное тоже просто. Я создам два разных комплексных типа, которые будут ссылаться на одну таблицу, и да и фиг с ними. Наверное.
Я не понимаю, как с помощью схемы sqlxmlbulkload записывать в поля таблицы некие предопределенные значения, которых нету в самом xml'е.
Т.е. "тип" ds тега.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<xs:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" 
xmlns:sql="urn:schemas-microsoft-com:mapping-schema" elementFormDefault="qualified">
  <xs:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" 
schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xs:annotation>
    <xs:appinfo>
      <sql:relationship name="FK_ds_b" parent="b" parent-key="_id_b" child="ds" child-key="_id_b" />
    </xs:appinfo>
  </xs:annotation>
  <xs:complexType name="typeb">
    <xs:sequence>
      <xs:element name="code" sql:field="[code]" sql:datatype="nvarchar(10)" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="sqltypes:nvarchar">
            <xs:maxLength value="10" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ds1" type="typeds" sql:relation="ds" sql:relationship="FK_ds_b" sql:key-field="_id_b" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="ds2" type="typeds" sql:relation="ds" sql:relationship="FK_ds_b" sql:key-field="_id_b" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="typeds">
    <xs:sequence>
      <xs:element name="ds" sql:field="[ds]" sql:datatype="nvarchar(10)" minOccurs="0">
        <!-- Как заставить эту сволочь записать 1 ds1 и 2 для ds2??? -->
        <xs:simpleType>
          <xs:restriction base="sqltypes:nvarchar">
            <xs:maxLength value="10" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="type" sql:field="[type]" type="sqltypes:smallint" sql:datatype="smallint" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="typea" sql:is-constant = "1">
    <xs:sequence>
    <xs:element name="b" type="typeb" sql:relation="b" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="a" type="typea" />  
</xs:schema>



aleks2223. Допилить остальное - попроще будет.
4. Не схему пилят под таблицы, а таблицы под схему.
Да ниоткуда это не следует. Это по определению.
К сожалению.
...
Рейтинг: 0 / 0
18.06.2018, 08:39
    #39661797
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
Ок, получается что это невозможно (мучения со схемой - ничего не дали)

Но как то множественные теги ds1 и ds2 в отдельные таблицы ds1 и ds2 - можно грузить???
Как указать то, что они в отдельные таблицы грузятся?
Или может быть их можно все в отдельное xml поле грузить? т.е. все теги ds1 - в отдельное xml поле ds1?

Как то должен этот ужас загружаться?
...
Рейтинг: 0 / 0
18.06.2018, 09:04
    #39661813
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
uaggsterКак то должен этот ужас загружаться?
Не проще будет причесать этот xml с помощью xslt, а потом уже грузить результат преобразования? Как-то так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />
  <xsl:template match="/">
    <a>
      <xsl:apply-templates />
    </a>
  </xsl:template>
  <xsl:template match="b">
    <b>
      <xsl:attribute name="id">
        <xsl:value-of select="code" />
      </xsl:attribute>
      <xsl:for-each select="*[substring(local-name(), 1, 2)='ds']">
        <ds>
          <xsl:attribute name="type">
            <xsl:value-of select="substring-after(local-name(), substring(local-name(), 1, 2))" />
          </xsl:attribute>
          <xsl:attribute name="value">
            <xsl:value-of select="text()" />
          </xsl:attribute>
        </ds>
      </xsl:for-each>
    </b>
  </xsl:template>
</xsl:stylesheet>


- на выходе получите
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<a>
  <b id="1">
    <ds type="1" value="1.11" />
    <ds type="1" value="1.12" />
    <ds type="1" value="1.13" />
    <ds type="2" value="2.11" />
  </b>
  <b id="2">
    <ds type="1" value="1.21" />
    <ds type="1" value="1.22" />
    <ds type="2" value="2.21" />
    <ds type="2" value="2.22" />
  </b>
  <b id="3">
    <ds type="1" value="1.31" />
    <ds type="2" value="2.31" />
    <ds type="2" value="2.32" />
  </b>
  <b id="4">
    <ds type="2" value="2.41" />
  </b>
</a>
...
Рейтинг: 0 / 0
18.06.2018, 10:49
    #39661861
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить аннотированную схему для sqlxmlbulkload
Сон Веры Павловны, да, идея великолепная, нечто подобное я и хотел, но как вот это
Код: html
1.
 <ds type="1" value="1.11" />

загрузить в отдельную таблицу?
Я просто не понимаю, как это будет в терминах sqlxmlbulkload, извините.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите составить аннотированную схему для sqlxmlbulkload / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]