Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Использование XML совместно с SQL.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Добавление данных

Для вставки данных используется раздел after. Раздел before опускается. Если вы хотите получить на выходе значение колонки identity, укажите атрибут returned (и атрибут at-identity, см. далее). Для элемента, обозначающего таблицу, вы можете дополнительно указать три атрибута:

  • id – будет рассмотрен в разделе Обновление данных;

  • at-identity – позволяет получить в результирующий XML-документ значение вставленного поля для колонки identity. Например, пусть имеется такая таблица

create table test1(_id int identity,fld1 int)

Вот шаблон, который вставляет в нее данные:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">

<updg:sync>

<updg:after updg:returnid="ident_field">

<test1 fld1="23" updg:at-identity="ident_field"/>

</updg:after>

</updg:sync>

</ROOT>

Результатом выполнения команды «http://server/server_pubs/template/upd1.xml» будет следующий документ:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">

<returnid><ident_field>1</ident_field></returnid>

</ROOT>

  • guid – предназначен для генерации глобально уникального идентификатора (GUID).

Давайте рассмотрим более сложный пример с использованием схемы. Вот схема:

<?xml version="1.0" encoding="windows-1251" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

<xsd:element name="Авторы" sql:relation="authors">

<xsd:complexType>

<xsd:attribute name="Имя" type="xsd:string"

sql:field="au_fname" />

<xsd:attribute name="Фамилия" type="xsd:string"

sql:field="au_lname" />

<xsd:attribute name="Идентификатор" type="xsd:string"

sql:field="au_id" />

<xsd:attribute name="Контракт" type="xsd:integer"

sql:field="contract" default="1"/>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Здесь мы явно использовали аннотации, так как названия XML-узлов составлены на русском. После выполнения следующего шаблона:

<?xml version="1.0" encoding="windows-1251" ?>

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">

<updg:sync mapping-schema="upd_schema.xml">

<updg:after>

<Авторы Имя="alex" Фамилия="shirshov" Идентификатор="123-15-3452"/>

</updg:after>

</updg:sync>

</ROOT>

мои имя и фамилия (да простят мне читатели нескромность) окажутся в таблице authors.

Обновление данных

Для обновления данных нужно использовать раздел before для определения обновляемых данных, и раздел after для определения конечных значений данных.

Давайте разберем пример:

<?xml version="1.0" encoding="windows-1251" ?>

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">

<updg:sync mapping-schema="upd_schema.xml">

<updg:before>

<Авторы Имя="alex" Фамилия="shirshov" Идентификатор="123-15-3452"

updg:id="for_update"/>

</updg:before>

<updg:after>

<Авторы Имя="Алексей" Фамилия="Ширшов" Идентификатор="123-15-3452"

updg:id="for_update"/>

<Авторы Имя="alex" Фамилия="shirshov" Идентификатор="123-15-3453"

updg:id="for_insert"/>

</updg:after>

</updg:sync>

</ROOT>

Работает он так: сначала находится запись, однозначно идентифицируемая в разделе before (ее мы вставили в предыдущем примере). Этой записи, с помощью атрибута id, присваивается идентификатор. Зачем он нужен? Так как в разделе after мы указали две записи, то возникает неоднозначность: одну из них нужно использовать для вставки, а другую для обновления. Чтобы эту неоднозначность разрешить, в разделе after присутствует ссылка на найденную в разделе before запись посредством атрибута id. В результате выполнения шаблона будут исправлены имя и фамилия в записи с идентификатором 123-15-3452, а также добавлена новая запись.