Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Диаграмма обновления указывает операцию вставки, когда экземпляр записи отображается в блоке <после> блокировки, но не в соответствующем <блоке.> В этом случае диаграмма обновления вставляет запись в <послеблокировку> в базу данных.
Это формат диаграммы обновления для операции вставки:
<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 к схеме
Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как 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>
В. Вставка нескольких записей с помощью диаграммы обновления
Эта диаграмма обновления добавляет две новые записи смены в таблицу 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 к схеме
Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как Updategram-AddShifts.xml.
Создайте и запустите тестовый скрипт 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 к схеме
Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как UpdategramSpacesInTableName.xml.
Создайте и запустите тестовый скрипт 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 к схеме
Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как 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> в блоке< после> блокировки. Поэтому при выполнении этой диаграммы обновления значение 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".
И. Вставка данных в столбец типа данных 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>
Тестирование диаграммы обновления
Скопируйте схему выше и вставьте ее в текстовый файл. Сохраните файл как XSD-SampleSchema.xml.
Замечание
Так как диаграммы обновления поддерживают сопоставление по умолчанию, невозможно определить начало и конец
xmlтипа данных. Это означает, что при вставке или обновлении таблиц сxmlстолбцами типа данных требуется схема сопоставления. Если схема не указана, SQLXML возвращает ошибку, указывающую, что один из столбцов отсутствует в таблице.Скопируйте указанную выше диаграмму обновления и вставьте ее в текстовый файл. Сохраните файл как SampleUpdategram.xml в той же папке, что и для сохранения SampleSchema.xml.
Создайте и используйте скрипт тестирования SQLXML 4.0 (Sqlxml4test.vbs) для выполнения диаграммы обновления.
Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".