Получение невостребованных данных при помощи 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 к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как OverflowXdr.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем 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"
    
  3. Создайте и запустите тестовый сценарий 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>