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


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

Область применения: SQL Server База данных SQL Azure

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

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

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

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

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

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

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

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

Атрибут updg:id

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

Атрибут updg:at-identity

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

Атрибут updg:guid

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

Примеры

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

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

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

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

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

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

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

Схема AdventureWorks2022 для таблицы HumanResources.Department налагает ограничение «not 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>  

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

Данная диаграмма обновления добавляет две новые записи о сменах в таблицу 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>  

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

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

Примечание.

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

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

Эта диаграмма обновления добавляет запись в таблицу Order Details в базе данных 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 в таблице "Сведения о заказе" имеет тип денег . Чтобы применить соответствующее преобразование типа (из строкового типа к типу денег ), символ знака доллара ($) необходимо добавить как часть значения. Если диаграмма обновления не указывает схему сопоставления, вычисляется первый символ строкового значения. Если первый символ — символ доллара ($), применяется соответствующее преобразование.

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

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

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

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

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

Следующая диаграмма обновления вставляет две записи: одну в таблицу 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 необходимо также указать атрибут nillable XSD.

В качестве примера рассмотрим следующую схему 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".

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

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

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

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

Например, на следующей диаграмме обновления (SampleUpdateGram.xml) <элемент Desc> обновляет столбец ProductDescription в таблице Production>productModel в образце AdventureWorks2022 базы данных. Результатом этой диаграммы обновления является обновление 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; aluminum 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="http://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)