Общие сведения о диаграммах обновления (SQLXML 4.0)
Вы можете изменять (вставлять, обновлять или удалять) базу данных в Microsoft SQL Server из существующего XML-документа с помощью диаграммы обновления или функции OpenXML Transact-SQL.
Функция 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> , диаграмма обновления выполняет операцию удаления.
Если экземпляр записи отображается только в блоке <после> без соответствующего экземпляра в блоке <before> , это операция вставки.
Если экземпляр записи отображается в блоке <before> и имеет соответствующий экземпляр в блоке <после> , это операция обновления. В этом случае диаграмма обновления обновляет экземпляр записи до значений, указанных в блоке <after> .
Указание сопоставления схемы в диаграмме обновления
В диаграмме обновления XML-абстракция, созданная сопоставляемой схемой (поддерживаются схемы XSD и XDR), может быть явной или неявной (то есть диаграмма обновления может работать как с заданной схемой сопоставления, так и без нее). Если схема сопоставления не указана, диаграмма обновления предполагает неявное сопоставление (сопоставление по умолчанию), где каждый элемент в <блоке до> или <после> блока сопоставляется с таблицей, а дочерний элемент или атрибут каждого элемента сопоставляется со столбцом в базе данных. Если схема сопоставления указана явно, то элементы и атрибуты в диаграмме обновления должны совпадать с элементами и атрибутами сопоставляемой схемы.
Неявное сопоставление (по умолчанию)
В большинстве случаев диаграмма обновления, выполняющая простые обновления, не требует схемы сопоставления. В такой ситуации диаграмма обновления полагается на схему сопоставления, принятую по умолчанию.
В следующей диаграмме обновления показано неявное сопоставление. В этом примере диаграмма обновления применяется для вставки данных нового клиента в таблицу Sales.Customer. Так как эта диаграмма обновления использует неявное сопоставление, <элемент Sales.Customer> сопоставляется с таблицей Sales.Customer, а атрибуты CustomerID и SalesPersonID — с соответствующими столбцами в таблице Sales.Customer.
<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> сопоставляют с соответствующими столбцами в таблице 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 становится _x005B_Order_x0020_Details_x005D_ в XML.
Аналогичным образом может потребоваться указать трехкомпонентные имена элементов, например <[база данных].[ owner]. [таблица]>. Так как символы квадратных скобок ([ и ]) недопустимы в XML, необходимо указать его как <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, где _x005B_ — кодировка левой скобки ([), а _x005D_ — кодировка правой скобки (]).
Выполнение диаграмм обновления
Диаграмма обновления является шаблоном, поэтому к ней применяются все механизмы обработки шаблона. В SQLXML 4.0 диаграмму обновления можно выполнить следующими способами:
с помощью команды ADO;
с помощью команды OLE DB.