Общие сведения о диаграммах обновления (SQLXML 4.0)

Применимо к:база данных SQL ServerAzure SQL

Вы можете изменить (вставить, обновить или удалить) базу данных в Microsoft SQL Server из существующего XML-документа с помощью диаграммы обновления или функции Transact-SQL OPENXML.

Функция 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 обозначает пространство имен диаграмм обновления.

Обзор синтаксиса

Диаграмма обновления — это шаблон с <блоками синхронизации>, <до> и <после> , которые формируют синтаксис диаграммы обновления. Следующий код показывает этот синтаксис в его простейшей форме:

<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> без соответствующего экземпляра в блоке <после> , диаграмма обновления выполняет операцию удаления.

  • Если экземпляр записи отображается только в блоке <после> без соответствующего экземпляра в блоке <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.

Аналогичным образом может потребоваться указать имена элементов из трех частей, например <[база данных].[ владелец]. [таблица]>. Так как символы квадратных скобок ([ и ]) недопустимы в XML, необходимо указать их как <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, где _x005B_ — кодировка левой скобки ([), а _x005D_ — кодировка правой скобки (]).

Выполнение диаграмм обновления

Диаграмма обновления является шаблоном, поэтому к ней применяются все механизмы обработки шаблона. В SQLXML 4.0 диаграмму обновления можно выполнить следующими способами:

  • с помощью команды ADO;

  • с помощью команды OLE DB.

См. также:

Вопросы безопасности диаграмм обновления (SQLXML 4.0)