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


Вставка данных с помощью диаграмм обновления XML (SQLXML 4.0)

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

Это формат диаграммы обновления для операции вставки:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema="SampleSchema.xml"]  >  
   [<updg:before>  
   </updg:before>]  
    <updg:after [updg:returnid="x y ...] >  
       <ElementName [updg:id="value"]   
                   [updg:at-identity="x"]   
                   [updg:guid="y"]  
                   attribute="value"   
                   attribute="value"  
                   ...  
       />  
      [<ElementName .../>... ]  
    </updg:after>  
  </updg:sync>  
</ROOT>  

<перед> блокировкой

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

<После> блокировки

В блоке <после> блокировки можно указать одну или несколько записей.

Если блок< после> этого не предоставляет значение для определенного столбца, то в диаграмме обновления используется значение по умолчанию, указанное в аннотированной схеме (если была указана схема). Если схема не указывает значение по умолчанию для столбца, то диаграмма обновления не указывает явное значение для этого столбца, а вместо этого назначает значение по умолчанию Microsoft SQL Server (если указано) этому столбцу. Если значение по умолчанию SQL Server отсутствует, а столбец принимает значение NULL, диаграмма обновления задает значение NULL столбца. Если столбец не имеет значения по умолчанию и не принимает значение NULL, команда завершается ошибкой, а диаграмма обновления возвращает ошибку. Необязательный updg:returnid атрибут используется для возврата значения удостоверения, создаваемого системой при добавлении записи в таблицу с столбцом типа IDENTITY.

Атрибут updg:id

Если диаграмма обновления вставляет только записи, она не требует атрибута updg:id . Дополнительные сведения см. в updg:idстатье об обновлении данных с помощью xml-обновлений (SQLXML 4.0).

updg:at-identity Attribute

Когда диаграмма обновления вставляет запись в таблицу с столбцом типа IDENTITY, она может записать назначенное системой значение с помощью необязательного updg:at-identity атрибута. Затем диаграмма обновления может использовать это значение в последующих операциях. После выполнения диаграммы обновления можно вернуть значение удостоверения, созданное путем указания атрибута updg:returnid .

атрибут updg:guid

Атрибут updg:guid является необязательным атрибутом, который создает глобальный уникальный идентификатор. Это значение остается в области для всего <блока синхронизации> , в котором он указан. Это значение можно использовать в любом месте блока синхронизации<>. Атрибут вызывает NEWGUID()функцию SQL Server для создания уникального идентификатора.

Примеры

Чтобы создать рабочие примеры с помощью следующих примеров, необходимо выполнить требования, указанные в разделе "Требования для выполнения примеров SQLXML".

Прежде чем использовать примеры диаграмм обновления, обратите внимание на следующее:

  • Большинство примеров используют сопоставление по умолчанию (т. е. схема сопоставления не указана в диаграмме обновления). Дополнительные примеры схем обновлений, использующих схемы сопоставления, см. в разделе "Указание схемы аннотированного сопоставления" в диаграмме обновления (SQLXML 4.0).

  • В большинстве примеров используется пример базы данных AdventureWorks2012 . Все обновления применяются к таблицам в этой базе данных.

А. Вставка записи с помощью диаграммы обновления

Эта диаграмма обновления с учетом атрибутов вставляет запись в таблицу HumanResources.Employee в базе данных AdventureWorks2012 .

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

Схема AdventureWorks2012 для таблицы HumanResources.Department накладывает ограничение "не null" для всех столбцов. Поэтому диаграмма обновления должна содержать значения, указанные для всех столбцов. DepartmentID — это столбец типа IDENTITY. Поэтому для него значения не указаны.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name="New Product Research"   
            GroupName="Research and Development"   
            ModifiedDate="2010-08-31"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Проверка образца запроса XPath к схеме
  1. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как MyUpdategram.xml.

  2. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

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

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department>  
            <Name> New Product Research </Name>  
            <GroupName> Research and Development </GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

В смешанном режиме (элементно-ориентированной и атрибут-ориентированной) диаграмме обновления элемент может иметь как атрибуты, так и подэлементы, как показано в этой диаграмме обновления:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name=" New Product Research "   
            <GroupName>Research and Development</GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

В. Вставка нескольких записей с помощью диаграммы обновления

Эта диаграмма обновления добавляет две новые записи смены в таблицу HumanResources.Shift. Диаграмма обновления не указывает необязательный <параметр перед> блоком.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Проверка образца запроса XPath к схеме
  1. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как Updategram-AddShifts.xml.

  2. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Другая версия этого примера — это диаграмма обновления, которая использует два отдельных <блока после> блоков вместо одного блока для вставки двух сотрудников. Это допустимо и может быть закодировано следующим образом:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after >  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

С. Работа с допустимыми символами SQL Server, недопустимыми в XML

В SQL Server имена таблиц могут содержать пробел, например таблицу "Сведения о заказе" в базе данных Northwind. Однако это недопустимо в XML-символах, которые являются допустимыми идентификаторами SQL Server, но недопустимые XML-идентификаторы могут быть закодированы с помощью "__xHHHH__" в качестве значения кодирования, где HHH обозначает четырехзначный шестнадцатеричный код UCS-2 для символа в самом значительном битовом порядке.

Замечание

В этом примере используется база данных Northwind. Базу данных Northwind можно установить с помощью скрипта SQL, доступного для скачивания с этого веб-сайта Майкрософт.

Кроме того, имя элемента должно быть заключено в скобки ([ ]). Так как символы [и] недопустимы в XML, их необходимо закодировать как _x005B_ и _x005D_ соответственно. (При использовании схемы сопоставления можно указать имена элементов, которые не содержат недопустимые символы, например пробелы. Схема сопоставления выполняет необходимое сопоставление; поэтому кодировать эти символы не нужно).

Эта диаграмма обновления добавляет запись в таблицу "Сведения о заказе" в базе данных Northwind:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <_x005B_Order_x0020_Details_x005D_ OrderID="1"  
            ProductID="11"  
            UnitPrice="$1.0"  
            Quantity="1"  
            Discount="0.0" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Столбец UnitPrice в таблице "Сведения о заказе" имеет money тип. Чтобы применить соответствующее преобразование типов (от string типа к money типу), символ знака доллара ($) должен быть добавлен как часть значения. Если диаграмма обновления не указывает схему сопоставления, вычисляется первый символ string значения. Если первый символ является знаком доллара ($), применяется соответствующее преобразование.

Если диаграмма обновления указана в схеме сопоставления, где столбец помечается соответствующим dt:type="fixed.14.4" образом либо sql:datatype="money", знак доллара ($) не требуется, и преобразование обрабатывается сопоставлением. Это рекомендуемый способ убедиться, что происходит соответствующее преобразование типов.

Проверка образца запроса XPath к схеме
  1. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как UpdategramSpacesInTableName.xml.

  2. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Д. Использование атрибута at-identity для получения значения, вставленного в столбец IDENTITY-type

Следующая диаграмма обновления вставляет две записи: одну в таблицу Sales.SalesOrderHeader и другую в таблицу Sales.SalesOrderDetail.

Сначала диаграмма обновления добавляет запись в таблицу Sales.SalesOrderHeader. В этой таблице столбец SalesOrderID является столбцом типа IDENTITY. Таким образом, при добавлении этой записи в таблицу в диаграмме обновления атрибут используется at-identity для записи назначенного значения SalesOrderID в виде "x" (значение заполнителя). Затем updategam указывает эту at-identity переменную в качестве значения атрибута SalesOrderID в элементе <Sales.SalesOrderDetail> .

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
   <Sales.SalesOrderHeader updg:at-identity="x"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00001111-2222-3333-4444-556677889900"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
      <Sales.SalesOrderDetail SalesOrderID="x"  
                LineNumber="1"  
                OrderQty="1"  
                ProductID="776"  
                SpecialOfferID="1"  
                UnitPrice="2429.9928"  
                UnitPriceDiscount="0.00"  
                rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  
                ModifiedDate="2001-07-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Если вы хотите вернуть значение удостоверения, созданное updg:at-identity атрибутом, можно использовать updg:returnid этот атрибут. Ниже приведена обновленная диаграмма обновления, которая возвращает это значение удостоверения. (Эта диаграмма обновления добавляет две записи заказа и две записи сведений о заказе, просто чтобы сделать пример немного более сложным.)

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync>  
  <updg:before>  
  </updg:before>  
  <updg:after updg:returnid="x y" >  
       <HumanResources.Shift updg:at-identity="x" Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift updg:at-identity="y" Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
  </updg:after>  
 </updg:sync>  
</ROOT>  

При выполнении диаграммы обновления возвращает результаты, аналогичные следующему, включая значение удостоверения (созданное значение столбца ShiftID, используемого для удостоверения таблицы), которое было создано:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">   
  <returnid>   
    <x>4</x>   
    <y>5</y>   
  </returnid>   
</ROOT>  
Проверка образца запроса XPath к схеме
  1. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как Updategram-returnId.xml.

  2. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Е. Использование атрибута updg:guid для создания уникального значения

В этом примере диаграмма обновления вставляет запись в таблицы Cust и CustOrder. Кроме того, диаграмма обновления создает уникальное значение атрибута CustomerID с помощью атрибута updg:guid .

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after updg:returnid="x" >  
      <Cust updg:guid="x" >  
         <CustID>x</CustID>  
         <LastName>Fuller</LastName>  
      </Cust>  
      <CustOrder>  
         <CustID>x</CustID>  
         <OrderID>1</OrderID>  
      </CustOrder>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

В диаграмме returnid обновления указывается атрибут. В результате возвращается созданный GUID:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <returnid>  
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>   
  </returnid>  
</ROOT>  
Тестирование диаграммы обновления
  1. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как Updategram-GenerateGuid.xml.

  2. Создайте следующие таблицы:

    USE tempdb  
    CREATE TABLE Cust (CustID uniqueidentifier, LastName varchar(20))  
    CREATE TABLE CustOrder (CustID uniqueidentifier, OrderID int)  
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

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

Диаграмма обновления в этом примере вставляет запись в следующую таблицу:

CustOrder(OrderID, EmployeeID, OrderType)  

Схема XSD указана в этой диаграмме обновления (т. е. отсутствует сопоставление элементов и атрибутов по умолчанию). Схема обеспечивает необходимое сопоставление элементов и атрибутов с таблицами и столбцами базы данных.

Следующая схема (CustOrderSchema.xml) описывает <элемент CustOrder> , состоящий из атрибутов OrderID и EmployeeID . Чтобы сделать схему более интересной, значение по умолчанию назначается атрибуту EmployeeID . В диаграмме обновления используется значение атрибута по умолчанию только для операций вставки, а затем, только если эта диаграмма обновления не указывает этот атрибут.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="CustOrder" >  
   <xsd:complexType>  
        <xsd:attribute name="OrderID"     type="xsd:integer" />   
        <xsd:attribute name="EmployeeID"  type="xsd:integer" />  
        <xsd:attribute name="OrderType  " type="xsd:integer" default="1"/>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Эта диаграмма обновления вставляет запись в таблицу CustOrder. На диаграмме обновления указаны только значения атрибутов OrderID и EmployeeID. Он не указывает значение атрибута OrderType. Поэтому в диаграмме обновления используется значение по умолчанию атрибута EmployeeID, указанного в предыдущей схеме.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
             xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync mapping-schema='CustOrderSchema.xml'>  
<updg:after>  
       <CustOrder OrderID="98000" EmployeeID="1" />  
</updg:after>  
</updg:sync>  
</ROOT>  

Дополнительные примеры схем обновления, которые указывают схему сопоставления, см. в разделе "Указание схемы аннотированного сопоставления" в диаграмме обновления (SQLXML 4.0).

Тестирование диаграммы обновления
  1. Создайте эту таблицу в базе данных tempdb :

    USE tempdb  
    CREATE TABLE CustOrder(  
                     OrderID int,   
                     EmployeeID int,   
                     OrderType int)  
    
  2. Скопируйте схему выше и вставьте ее в текстовый файл. Сохраните файл как CustOrderSchema.xml.

  3. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как CustOrderUpdategram.xml в той же папке, что и на предыдущем шаге.

  4. Создайте и используйте скрипт тестирования SQLXML 4.0 (Sqlxml4test.vbs) для выполнения диаграммы обновления.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Это эквивалентная схема XDR:

<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
 <ElementType name="CustOrder" >  
    <AttributeType name="OrderID" />  
    <AttributeType name="EmployeeID" />  
    <AttributeType name="OrderType" default="1" />  
    <attribute type="OrderID"  />  
    <attribute type="EmployeeID" />  
    <attribute type="OrderType" />  
  </ElementType>  
</Schema>  

G. Использование атрибута xsi:nil для вставки значений NULL в столбец

Если вы хотите вставить значение NULL в соответствующий столбец в таблице, можно указать xsi:nil атрибут элемента в диаграмме обновления. В соответствующей схеме XSD атрибут XSD nillable также должен быть указан.

Например, рассмотрим эту схему XSD:

<?xml version="1.0"?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="Student" sql:relation="Students">  
  <xsd:complexType>  
    <xsd:all>  
      <xsd:element name="fname" sql:field="first_name"   
                                type="xsd:string"   
                                 nillable="true"/>  
    </xsd:all>  
    <xsd:attribute name="SID"   
                        sql:field="StudentID"  
                        type="xsd:ID"/>      
    <xsd:attribute name="lname"       
                        sql:field="last_name"  
                        type="xsd:string"/>  
    <xsd:attribute name="minitial"    
                        sql:field="middle_initial"   
                        type="xsd:string"/>  
    <xsd:attribute name="years"       
                         sql:field="no_of_years"  
                         type="xsd:integer"/>  
  </xsd:complexType>  
 </xsd:element>  
</xsd:schema>  

Схема XSD указывает nillable="true" для <элемента fname> . В следующей схеме обновления используется следующая схема:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
      xmlns:updg="urn:schemas-microsoft-com:xml-updategram"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  
<updg:sync mapping-schema='StudentSchema.xml'>  
  <updg:before/>  
  <updg:after>  
    <Student SID="S00004" lname="Elmaci" minitial="" years="2">  
      <fname xsi:nil="true">  
    </fname>  
    </Student>  
  </updg:after>  
</updg:sync>  
  
</ROOT>  

Диаграмма обновления указывает xsi:nil для <элемента fname> в блоке< после> блокировки. Поэтому при выполнении этой диаграммы обновления значение NULL вставляется для столбца first_name в таблице.

Тестирование диаграммы обновления
  1. Создайте следующую таблицу в базе данных tempdb :

    USE tempdb  
    CREATE TABLE Students (  
       StudentID char(6)NOT NULL ,  
       first_name varchar(50),  
       last_name varchar(50),  
       middle_initial char(1),  
       no_of_years int NULL)  
    GO  
    
  2. Скопируйте схему выше и вставьте ее в текстовый файл. Сохраните файл как StudentSchema.xml.

  3. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как StudentUpdategram.xml в той же папке, что и на предыдущем шаге, чтобы сохранить StudentSchema.xml.

  4. Создайте и используйте скрипт тестирования SQLXML 4.0 (Sqlxml4test.vbs) для выполнения диаграммы обновления.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

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

В диаграмме обновления можно иметь элементы, принадлежащие пространству имен, объявленному в том же элементе в диаграмме обновления. В этом случае соответствующая схема также должна объявлять то же пространство имен, и элемент должен принадлежать этому целевому пространству имен.

Например, в следующей диаграмме обновления (UpdateGram-ElementHavingNamespace.xml), <элемент Order> принадлежит пространству имен, объявленному в элементе.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema='XSD-ElementHavingNameSpace.xml'>  
    <updg:after>  
       <x:Order  xmlns:x="https://server/xyz/schemas/"  
             updg:at-identity="SalesOrderID"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00009999-8888-7777-6666-554433221100"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

В этом случае схема также должна объявить пространство имен, как показано в этой схеме:

Следующая схема (XSD-ElementHavingNamespace.xml) показывает, как должен быть объявлен соответствующий элемент и атрибуты.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:dt="urn:schemas-microsoft-com:datatypes"   
     xmlns:sql="urn:schemas-microsoft-com:mapping-schema"    
     xmlns:x="https://server/xyz/schemas/"   
     targetNamespace="https://server/xyz/schemas/" >  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type"/>  
  <xsd:complexType name="Order_type">  
    <xsd:attribute name="SalesOrderID"  type="xsd:ID"/>  
    <xsd:attribute name="RevisionNumber" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OrderDate" type="xsd:dateTime"/>  
    <xsd:attribute name="DueDate" type="xsd:dateTime"/>  
    <xsd:attribute name="ShipDate" type="xsd:dateTime"/>  
    <xsd:attribute name="Status" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OnlineOrderFlag" type="xsd:boolean"/>  
    <xsd:attribute name="SalesOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="PurchaseOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="AccountNumber" type="xsd:string"/>  
    <xsd:attribute name="CustomerID" type="xsd:int"/>  
    <xsd:attribute name="ContactID" type="xsd:int"/>  
    <xsd:attribute name="SalesPersonID" type="xsd:int"/>  
    <xsd:attribute name="TerritoryID" type="xsd:int"/>  
    <xsd:attribute name="BillToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipMethodID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardApprovalCode" type="xsd:string"/>  
    <xsd:attribute name="CurrencyRateID" type="xsd:int"/>  
    <xsd:attribute name="SubTotal" type="xsd:decimal"/>  
    <xsd:attribute name="TaxAmt" type="xsd:decimal"/>  
    <xsd:attribute name="Freight" type="xsd:decimal"/>  
    <xsd:attribute name="TotalDue" type="xsd:decimal"/>  
    <xsd:attribute name="Comment" type="xsd:string"/>  
    <xsd:attribute name="rowguid" type="xsd:string"/>  
    <xsd:attribute name="ModifiedDate" type="xsd:dateTime"/>  
  </xsd:complexType>  
</xsd:schema>  
Тестирование диаграммы обновления
  1. Скопируйте схему выше и вставьте ее в текстовый файл. Сохраните файл как XSD-ElementHavingNamespace.xml.

  2. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как Updategram-ElementHavingNamespace.xml в той же папке, что и для сохранения XSD-ElementHavingnamespace.xml.

  3. Создайте и используйте скрипт тестирования SQLXML 4.0 (Sqlxml4test.vbs) для выполнения диаграммы обновления.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

И. Вставка данных в столбец типа данных XML

Тип xml данных появился в SQL Server 2005. С помощью диаграмм обновления можно вставлять и обновлять данные, хранящиеся в xml столбцах типов данных, с помощью следующих положений:

  • Столбец xml нельзя использовать для идентификации существующей строки. Поэтому его нельзя включить в updg:before раздел диаграммы обновления.

  • Пространства имен, которые находятся в области фрагмента XML, вставленного xml в столбец, будут сохранены, а их объявления пространства имен добавляются в верхний элемент вставленного фрагмента.

Например, на следующей диаграмме обновления (SampleUpdateGram.xml) <элемент Desc> обновляет столбец ProductDescription в таблице Production productModel в>образце базы данных AdventureWorks2012 . Результатом этой диаграммы обновления является обновление XML-содержимого столбца ProductDescription с содержимым <XML элемента Desc> .

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
    <updg:sync mapping-schema="SampleSchema.xml" >  
       <updg:before>  
<ProductModel ProductModelID="19">  
   <Name>Mountain-100</Name>  
</ProductModel>  
    </updg:before>  
    <updg:after>  
 <ProductModel>  
    <Name>Mountain-100</Name>  
    <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>  
        <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
              xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
              xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures"   
              xmlns:html="http://www.w3.org/1999/xhtml"   
              xmlns="">  
  <p1:Summary>  
     <html:p>Insert Example</html:p>  
  </p1:Summary>  
  <p1:Manufacturer>  
    <p1:Name>AdventureWorks</p1:Name>  
    <p1:Copyright>2002</p1:Copyright>  
    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>  
  </p1:Manufacturer>  
  <p1:Features>These are the product highlights.   
    <wm:Warranty>  
       <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
       <wm:Description>parts and labor</wm:Description>  
    </wm:Warranty>  
    <wm:Maintenance>  
       <wm:NoOfYears>10 years</wm:NoOfYears>  
       <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>  
    </wm:Maintenance>  
    <wf:wheel>High performance wheels.</wf:wheel>  
    <wf:saddle>  
      <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle>  
    <wf:pedal>  
       <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal>  
    <wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>  
    <wf:crankset> Triple crankset; alumunim crank arm; flawless shifting. </wf:crankset>  
   </p1:Features>  
   <p1:Picture>  
      <p1:Angle>front</p1:Angle>  
      <p1:Size>small</p1:Size>  
      <p1:ProductPhotoID>118</p1:ProductPhotoID>  
   </p1:Picture>  
   <p1:Specifications> These are the product specifications.  
     <Material>Almuminum Alloy</Material>  
     <Color>Available in most colors</Color>  
     <ProductLine>Mountain bike</ProductLine>  
     <Style>Unisex</Style>  
     <RiderExperience>Advanced to Professional riders</RiderExperience>  
   </p1:Specifications>  
  </p1:ProductDescription>  
 </Desc>  
      </ProductModel>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Диаграмма обновления ссылается на следующую аннотированную схему XSD (SampleSchema.xml).

<?xml version="1.0" encoding="utf-8" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
           xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">   
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >  
     <xsd:complexType>  
       <xsd:sequence>  
          <xsd:element name="Name" type="xsd:string"></xsd:element>  
          <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">  
           <xsd:complexType>  
            <xsd:sequence>  
              <xsd:element name="ProductDescription">  
                 <xsd:complexType>  
                   <xsd:sequence>  
                     <xsd:element name="Summary" type="xsd:anyType">  
                     </xsd:element>  
                   </xsd:sequence>  
                 </xsd:complexType>  
              </xsd:element>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>   
       </xsd:sequence>  
       <xsd:attribute name="ProductModelID" sql:field="ProductModelID"/>  
     </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Тестирование диаграммы обновления
  1. Скопируйте схему выше и вставьте ее в текстовый файл. Сохраните файл как XSD-SampleSchema.xml.

    Замечание

    Так как диаграммы обновления поддерживают сопоставление по умолчанию, невозможно определить начало и конец xml типа данных. Это означает, что при вставке или обновлении таблиц с xml столбцами типа данных требуется схема сопоставления. Если схема не указана, SQLXML возвращает ошибку, указывающую, что один из столбцов отсутствует в таблице.

  2. Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как SampleUpdategram.xml в той же папке, что и для сохранения SampleSchema.xml.

  3. Создайте и используйте скрипт тестирования SQLXML 4.0 (Sqlxml4test.vbs) для выполнения диаграммы обновления.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

См. также

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