Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения: SQL Server База данных SQL Azure
Диаграмма обновления указывает операцию вставки, когда экземпляр записи отображается в <after> блоке, но не в соответствующем <before> блоке. В этом случае диаграмма обновления вставляет запись в <after> блок в базу данных.
Ниже приведен формат диаграммы обновления для операции вставки:
<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>
блок <before>
Блок <before> может быть опущен для операции вставки. Если необязательный mapping-schema атрибут не указан, <ElementName> то указанный в диаграмме обновления сопоставляется с таблицей базы данных и дочерними элементами или атрибутами, сопоставляющимися со столбцами в таблице.
блок <after>
В блоке <after> можно указать одну или несколько записей.
<after> Если блок не предоставляет значение для определенного столбца, в диаграмме обновления используется значение по умолчанию, указанное в аннотированной схеме (если была указана схема). Если схема не указывает значение по умолчанию для столбца, то диаграмма обновления не указывает явное значение для этого столбца, а вместо этого назначает значение по умолчанию 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 является необязательным атрибутом, который создает глобальный уникальный идентификатор. Это значение остается в области для всего <sync> блока, в котором он указан. Это значение можно использовать в любом месте <sync> блока. Атрибут вызывает NEWGUID() функцию SQL Server для создания уникального идентификатора.
Примеры
Чтобы создать рабочие примеры с помощью следующих примеров, необходимо выполнить требования, указанные в разделе "Требования для выполнения примеров SQLXML".
Прежде чем использовать примеры диаграмм обновления, рассмотрите следующее:
В большинстве примеров используется сопоставление по умолчанию (то есть в диаграмме обновления схема сопоставления не задана). Дополнительные примеры схем обновлений, использующих схемы сопоставления, см. в разделе "Указание схемы аннотированного сопоставления" в диаграмме обновления (SQLXML 4.0).
В большинстве примеров задействован образец базы данных
AdventureWorks2025. Все обновления применяются к таблицам в этой базе данных.
А. Вставка записи с помощью диаграммы обновления
Эта диаграмма обновления с учетом атрибутов вставляет запись в HumanResources.Employee таблицу AdventureWorks2025 в базе данных.
В этом примере диаграмма обновления не указывает схему сопоставления. Следовательно, диаграмма обновления использует сопоставление по умолчанию, при котором имя элемента сопоставляется с именем таблицы, а атрибуты или дочерние элементы сопоставляются со столбцами таблицы.
Схема AdventureWorks2025 для таблицы 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 к схеме
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как
MyUpdategram.xml.Создайте и используйте скрипт тестирования 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 . Диаграмма обновления не указывает необязательный <before> блок.
<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 к схеме
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как
Updategram-AddShifts.xml.Создайте и используйте скрипт тестирования SQLXML 4.0 (
Sqlxml4test.vbs) для выполнения шаблона.Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".
Другая версия этого примера — это диаграмма обновления, которая использует два отдельных <after> блока вместо одного блока для вставки двух сотрудников. Это допустимо и может быть закодировано следующим образом:
<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_ качестве значения кодирования, где HHHH обозначается шестнадцатеричный шестнадцатеричный код 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 к схеме
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как
UpdategramSpacesInTableName.xml.Создайте и используйте скрипт тестирования SQLXML 4.0 (
Sqlxml4test.vbs) для выполнения шаблона.Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".
D. Используйте атрибут at-identity, чтобы получить значение, вставленное в столбец IDENTITY-type
Следующая диаграмма обновления вставляет две записи: одну в Sales.SalesOrderHeader таблицу и другую в таблицу Sales.SalesOrderDetail .
Во-первых, диаграмма обновления добавляет запись в таблицу Sales.SalesOrderHeader . В этой таблице столбец SalesOrderID является столбцом IDENTITYтипа. Таким образом, при добавлении этой записи в таблицу в диаграмме обновления атрибут используется at-identity для записи назначенного значения SalesOrderID в виде "x" (значение заполнителя). Затем диаграмма Updategram указывает эту 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 к схеме
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как
Updategram-returnId.xml.Создайте и используйте скрипт тестирования 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>
Тестирование диаграммы обновления
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как
Updategram-GenerateGuid.xml.Создайте следующие таблицы.
USE tempdb; CREATE TABLE Cust ( CustID UNIQUEIDENTIFIER, LastName VARCHAR (20) ); CREATE TABLE CustOrder ( CustID UNIQUEIDENTIFIER, OrderID INT );Создайте и используйте скрипт тестирования 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).
Тестирование диаграммы обновления
Создайте эту таблицу
tempdbв базе данных:USE tempdb; CREATE TABLE CustOrder ( OrderID INT, EmployeeID INT, OrderType INT );Скопируйте предыдущую схему и вставьте ее в текстовый файл. Сохраните файл как
CustOrderSchema.xml.Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл, как
CustOrderUpdategram.xmlв той же папке, что и на предыдущем шаге.Создайте и используйте скрипт тестирования 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> элемента в блоке <after> . Поэтому при выполнении этой диаграммы обновления значение NULL вставляется для столбца first_name в таблице.
Тестирование диаграммы обновления
Создайте в базе данных следующую таблицу
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Скопируйте предыдущую схему и вставьте ее в текстовый файл. Сохраните файл как
StudentSchema.xml.Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл, как
StudentUpdategram.xmlи в той же папке, которая использовалась на предыдущем шаге для сохраненияStudentSchema.xml.Создайте и используйте скрипт тестирования 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>
Тестирование диаграммы обновления
Скопируйте предыдущую схему и вставьте ее в текстовый файл. Сохраните файл как
XSD-ElementHavingNamespace.xml.Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл, как
Updategram-ElementHavingNamespace.xmlв той же папке, что и для сохраненияXSD-ElementHavingnamespace.xml.Создайте и используйте скрипт тестирования SQLXML 4.0 (
Sqlxml4test.vbs) для выполнения диаграммы обновления.Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".
I. Вставка данных в столбец типа данных XML
С помощью диаграмм обновления можно вставлять и обновлять данные, хранящиеся в столбцах типов данных XML , с помощью следующих рекомендаций:
Xml-столбец нельзя использовать для идентификации существующей строки. Поэтому его нельзя включить в
updg:beforeраздел диаграммы обновления.Пространства имен, которые находятся в области фрагмента XML, вставленного в xml-столбец, сохраняются, а их объявления пространства имен добавляются в верхний элемент вставленного фрагмента.
Например, в следующей диаграмме обновления (SampleUpdateGram.xml) <Desc> элемент обновляет столбец ProductDescription в>таблице AdventureWorks2025 ProductModel в примере базы данных. Результатом этой диаграммы обновления является обновление XML-содержимого столбца ProductDescription с содержимым <Desc> XML элемента.
<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 href="ProductDescription.xsl" type="text/xsl" e="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>Aluminum 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>
Тестирование диаграммы обновления
Скопируйте предыдущую схему и вставьте ее в текстовый файл. Сохраните файл как
XSD-SampleSchema.xml.Примечание.
Так как диаграммы обновления поддерживают сопоставление по умолчанию, невозможно определить начало и окончание типа данных XML . Это означает, что схема сопоставления требуется при вставке или обновлении таблиц с столбцами типа данных XML . Если схема не указана, SQLXML возвращает ошибку, указывающую, что один из столбцов отсутствует в таблице.
Скопируйте предыдущую диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл, как
SampleUpdategram.xmlв той же папке, что и для сохраненияSampleSchema.xml.Создайте и используйте скрипт тестирования SQLXML 4.0 (
Sqlxml4test.vbs) для выполнения диаграммы обновления.Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".