Получение невостребованных данных при помощи sql:overflow-field (схема XDR)
Важно! |
|---|
Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0). |
Если записи вставляются в базу данных из XML-документа с помощью OPENXML, все другие невостребованные данные из исходного XML-документа можно сохранить в столбце. При получении данных из базы данных с помощью аннотированных схем атрибут sql:overflow-field можно указывать для определения столбца, в котором хранятся данные переполнения.
Затем эти данные можно получить одним из трех способов.
Атрибуты, хранящиеся в столбце переполнения, добавляются к элементу, содержащему аннотацию sql:overflow-field.
Вложенные элементы и их потомки, хранящиеся в столбце переполнения базы данных, добавляются как вложенные элементы вслед за содержимым, явно заданным в схеме (без сохранения упорядочивания).
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.
A. Указание поля sql:overflow для элемента <ElementType> в схеме XDR
В примере предполагается, что эта таблица существует в базе данных tempdb.
USE tempdbCREATE TABLE Customers2 (CustomerID VARCHAR(10), ContactName VARCHAR(30), AddressOverflow NVARCHAR(500))GOINSERT INTO Customers2 VALUES ('ALFKI', 'Joe','<Address> <Address1>Maple St.</Address1> <Address2>Apt. E105</Address2> <City>Seattle</City> <State>WA</State> <Zip>98147</Zip> </Address>')GO
В этом примере схема сопоставления получает невостребованные данные, хранящиеся в столбце AddressOverflow таблицы Customers2. Атрибут sql:overflow-field задан в <ElementType>.
<?xml version="1.0" ?><Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Customers2" sql:overflow-field="AddressOverflow" > <AttributeType name="CustomerID" /> <AttributeType name="ContactName" /> <attribute type="CustomerID" /> <attribute type="ContactName"/> </ElementType></Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как OverflowXdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем OverflowXdrT.xml в том же каталоге, где был сохранен файл OverflowXdr.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="OverflowXdr.xml"> Customers2 </sql:xpath-query></ROOT>Путь к каталогу схемы сопоставления (файл OverflowXdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\OverflowXdr.xml"Создайте и запустите тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
Полученный результирующий набор показан ниже.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Customers2 CustomerID="ALFKI" ContactName="Joe"> <Address1>Maple St.</Address1> <Address2>Apt. E105</Address2> <City>Seattle</City> <State>WA</State> <Zip>98147</Zip> </Customers2></ROOT>
Важно!