Общие сведения о диаграммах обновления (SQLXML 4.0)
С помощью диаграммы обновления или функции OPENXML языка Transact-SQL можно производить изменение базы данных в Microsoft SQL Server из существующего XML-документа (вставку, обновление и удаление).
Функция OPENXML изменяет базу данных, разделяя существующий XML-документ и формируя набор строк, который можно передавать инструкциям INSERT, UPDATE и DELETE. С помощью функции OPENXML операции выполняются непосредственно с таблицами базы данных. Поэтому использование функции OPENXML является наиболее оптимальным вариантом во всех случаях, когда поставщики наборов строк, например таблицы, могут быть источниками.
Диаграммы обновления, подобно функции OPENXML, позволяют вставлять строки в базу данных, а также обновлять и удалять строки. Однако диаграммы обновления работают не с таблицами, а с XML-представлениями, создаваемыми аннотированной XSD-схемой (или XDR-схемой), например, обновления применяются к XML-представлению, созданному сопоставляемой схемой. Схема сопоставления в свою очередь содержит данные, необходимые для сопоставления XML-элементов и атрибутов с соответствующими таблицами и столбцами базы данных. Диаграмма обновления использует эти данные сопоставления, чтобы выполнить обновление таблиц и столбцов базы данных.
Примечание |
|---|
Настоящая документация предназначена для тех, кто знаком с шаблонами и поддержкой схем сопоставления в SQL Server. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Сведения о приложениях прежних версий, которые используют XDR, см. в разделе Схемы XDR с заметками (устарели в SQLXML 4.0). |
Обязательные пространства имен в диаграмме обновления
Ключевые слова в диаграмме обновления, например <sync>, <before> и <after>, существуют в пространстве имен urn:schemas-microsoft-com:xml-updategram. Префикс пространства имен может быть произвольным. В этой документации префикс updg обозначает пространство имен updategram.
Обзор синтаксиса
Диаграмма обновления представляет собой шаблон с блоками <sync>, <before> и <after>, формирующими синтаксис диаграммы обновления. Следующий код показывает этот синтаксис в его простейшей форме:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] > <updg:before> ... </updg:before> <updg:after> ... </updg:after> </updg:sync></ROOT>
Следующие определения описывают роль каждого блока:
<before>
Определяет текущее состояние (или «исходное состояние») экземпляра записи.<after>
Определяет новое состояние изменяемых данных.<sync>
Содержит блоки <before> и <after>. Блок <sync> может включать несколько наборов блоков <before> и <after>. Если имеется более одного набора блоков <before> и <after> , они должны указываться парами (даже если они пустые). Более того, диаграмма обновления может иметь несколько блоков <sync>. Каждый блок <sync> является одной единицей транзакции (это означает, что блок <sync> выполняется целиком или не выполняется вообще). Если в диаграмме обновления задано несколько блоков <sync>, ошибка одного блока <sync> не влияет на остальные блоки <sync> .
Будет ли диаграмма обновления удалять, вставлять или обновлять экземпляр записи, зависит от содержимого блоков <before> и <after> .
Если экземпляр записи имеется только в блоке <before> без соответствующего экземпляра в блоке <after>, диаграмма обновления выполняет операцию удаления.
Если экземпляр записи имеется только в блоке <after> без соответствующего экземпляра в блоке <before> , диаграмма обновления выполняет операцию вставки.
Если экземпляр записи имеется только в блоке <before> без соответствующего экземпляра в блоке <after>, диаграмма обновления выполняет операцию обновления. В этом случае диаграмма обновления обновляет экземпляр записи до значений, заданных в блоке <after> .
Указание сопоставления схемы в диаграмме обновления
В диаграмме обновления XML-абстракция, созданная сопоставляемой схемой (поддерживаются схемы XSD и XDR) может быть явной или неявной (то есть диаграмма обновления может работать как заданной схемой сопоставления, так и без нее). Если не задать схему сопоставления, диаграмма обновления предполагает неявное сопоставление (по умолчанию), в котором каждый элемент блока <before> или <after> сопоставляется с таблицей и каждым элементом дочернего элемента, или атрибут сопоставляется со столбцом базы данных. Если схема сопоставления указывается явно, элементы и атрибуты в диаграмме обновления должны соответствовать элементам и атрибутам сопоставляемой схемы.
Неявное сопоставление (по умолчанию)
В большинстве случаев диаграмма обновления, выполняющая простые обновления, не требует схемы сопоставления. В такой ситуации диаграмма обновления полагается на схему сопоставления, принятую по умолчанию.
В следующей диаграмме обновления показано неявное сопоставление. В этом примере диаграмма обновления вставляет нового клиента в таблицу Sales.Customer. Поскольку диаграмма обновления использует неявное сопоставление, элемент <Sales.Customer> сопоставляется с таблицей Sales.Customer, а атрибуты CustomerID и SalesPersonID сопоставляются с соответствующими столбцами той же таблицы.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"><updg:sync ><updg:before></updg:before><updg:after> <Sales.Customer CustomerID="1" SalesPersonID="277" /> </updg:after></updg:sync></ROOT>
Явное сопоставление
Если указывается схема сопоставления (XSD или XDR), диаграмма обновления использует эту схему для определения подлежащих обновлению таблиц и столбцов базы данных.
Если диаграмма обновления выполняет сложное обновление (например, вставку записей в несколько таблиц на основе связи «родители-потомки», заданной в схеме сопоставления), необходимо явно задать схему сопоставления с помощью атрибута mapping-schema по которому выполняется диаграмма обновления.
Поскольку диаграмма обновления является шаблоном, заданный в ней путь для схемы сопоставления зависит от расположения файла шаблона (является относительным). Дополнительные сведения см. в разделе Определение схемы с заметками сопоставления в диаграмме обновления (SQLXML 4.0).
Элементная и атрибутивная модель сопоставления в диаграммах обновления
При сопоставлении по умолчанию (когда сопоставляемая схема не указывается в диаграмме обновления), элементы диаграммы обновления сопоставляются с таблицами и дочерними элементами (в случае элементной модели сопоставления), а атрибуты (в случае атрибутивной модели сопоставления) сопоставляются со столбцами.
Сопоставление, ориентированное на элементы
В диаграмме обновления, основанной на элементах, элемент содержит дочерние элементы, обозначающие свойства этого элемента. В качестве см. следующую диаграмму обновления. Элемент <Person.Contact> содержит дочерние элементы <FirstName> и <LastName>. Эти дочерние элементы являются свойствами элемента <Person.Contact>.
Поскольку диаграмма обновления не задает схему сопоставления, в ней используется неявное сопоставление, в котором элемент <Person.Contact> сопоставляется с таблицей Person.Contact, а его дочерние элементы – со столбцами FirstName и LastName.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"><updg:sync > <updg:after> <Person.Contact> <FirstName>Catherine</FirstName> <LastName>Abel</LastName> </Person.Contact> </updg:after></updg:sync></ROOT>
Атрибутивное сопоставление
В диаграмме обновления, основанной на атрибутах, элементы имеют атрибуты. В следующей диаграмме обновления используется атрибутивная модель сопоставления. В этом примере элемент <Person.Contact> состоит из атрибутов FirstName и LastName. Они являются свойствами элемента <Person.Contact>. Как и в предыдущем примере, в этой диаграмме обновления не указана схема сопоставления, поэтому она сопоставляет элемент <Person.Contact> таблице Person.Contact и атрибутам элементов в соответствующих столбцах этой таблицы.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"><updg:sync > <updg:before> </updg:before> <updg:after> <Person.Contact FirstName="Catherine" LastName="Abel" /> </updg:after></updg:sync></ROOT>
Одновременное использование элементной и атрибутивной моделей сопоставления
Можно использовать сочетание элементной и атрибутивной моделей сопоставления, как показано в следующей диаграмме обновления. Обратите внимание, что элемент <Person.Contact> содержит как атрибуты, так и дочерний элемент. Кроме того эта диаграмма обновления использует неявное сопоставление. Таким образом, атрибут FirstName и дочерний элемент <LastName> сопоставляются с соответствующим столбцами в таблице the Person.Contact.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"><updg:sync > <updg:before> </updg:before> <updg:after> <Person.Contact FirstName="Catherine" > <LastName>Abel</LastName> </Person.Contact> </updg:after></updg:sync></ROOT>
Работа с символами, допустимыми в SQL Server, но не допустимыми в XML
В SQL Server имена таблиц могут содержать пробел. Но в XML имена таблиц такого типа не допускаются.
Для представления символов, являющихся допустимыми идентификаторами SQL Server, но не разрешенных в XML, в качестве используется кодовое значение '__xHHHH__', где HHHH означает четырехразрядный шестнадцатеричный код символа в UCS-2, где самым старшим является первый разряд. При использовании этой схемы кодировки символ пробела замещается x0020 (четырехразрядный шестнадцатеричный код пробела), и таким образом, имя таблицы [Подробности заказа] в SQL Server в XML приобретает вид «_x005B_Order_x0020_Details_x005D_».
Точно так же можно указать трехкомпонентные имена элементов, например <[базаданных].[владелец].[таблица]>. Поскольку в XML символы квадратных скобок ([ и ]) недопустимы, можно указать это имя как <_x005B_базаданных_x005D_._x005B_владелец_x005D_._x005B_таблица_x005D_>, где _x005B_ заменяет левую квадратную скобку ([), а _x005D_ – правую (]).
Выполнение диаграмм обновления
Поскольку диаграмма обновления является шаблоном, к ней применяются все механизмы обработки шаблона. В SQLXML 4.0 диаграмму обновления можно выполнить следующими способами:
с помощью команды ADO;
с помощью команды OLE DB.
Примечание