powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите составить аннотированную схему для sqlxmlbulkload
10 сообщений из 10, страница 1 из 1
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661086
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 в одну таблицу, с указанием типа.
Как???
...
Рейтинг: 0 / 0
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661236
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

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

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

Сорри, что не по теме. Но с чего вдруг
[type] between 1 and 2
и smallint ?
Это ниоткуда не следует. Это по определению. (С)
...
Рейтинг: 0 / 0
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661249
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661316
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Ну вы же не возражаете против nvarchar всего 10.
Значит я за tinyint
...
Рейтинг: 0 / 0
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661328
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661797
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, получается что это невозможно (мучения со схемой - ничего не дали)

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

Как то должен этот ужас загружаться?
...
Рейтинг: 0 / 0
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661813
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите составить аннотированную схему для sqlxmlbulkload
    #39661861
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, да, идея великолепная, нечто подобное я и хотел, но как вот это
Код: html
1.
 <ds type="1" value="1.11" />

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


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