Поделиться через


Введение в запросы на обновление (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).

Обязательные пространства имен в диаграмме обновления

Ключевые слова в диаграмме обновления, такие как <синхронизация>, <до> и <после>, существуют в urn:schemas-microsoft-com:xml-updategram пространстве имен. Используемый префикс пространства имен является произвольным. В этой документации updg префикс обозначает updategram пространство имен.

Проверка синтаксиса

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

<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>  

В следующих определениях описывается роль каждого из этих блоков:

<перед>
Определяет существующее состояние (также называемое "состоянием перед состоянием") экземпляра записи.

<после>
Определяет новое состояние, в которое необходимо изменить данные.

<синхронизировать>
Содержит блоки <до> и <после> . Блок <синхронизации> может содержать несколько наборов <до> и <после> блоков. Если существует несколько наборов <до> и <после> блоков, эти блоки (даже если они пустые) должны быть указаны в виде пар. Кроме того, на диаграмме обновления может быть несколько <блоков синхронизации> . Каждый блок синхронизации — это одна единица транзакции (это означает, что все в блоке <синхронизации>>выполнено или ничего не сделано).< Если в диаграмме обновления указано несколько <блоков синхронизации> , сбой одного <блока синхронизации> не влияет на другие <блоки синхронизации> .

Независимо от того, удаляет ли диаграмма обновления, вставляет или обновляет экземпляр записи, зависит от содержимого <блоков до> и <после> него:

  • Если экземпляр записи отображается только в блоке <до> отсутствия соответствующего экземпляра в блоке< после> блокировки, то диаграмма обновления выполняет операцию удаления.

  • Если экземпляр записи отображается только в блоке <после> отсутствия соответствующего экземпляра в блоке <перед> блоком, это операция вставки.

  • Если экземпляр записи отображается в <блоке до> и имеет соответствующий экземпляр в блоке< после> блокировки, это операция обновления. В этом случае диаграмма обновления обновляет экземпляр записи до значений, указанных в блоке< после> блокировки.

Указание схемы сопоставления в диаграмме обновления

В диаграмме обновления 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)