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


Получение невостребованных данных с помощью sql:overflow-field (SQLXML 4.0)

Когда в базу данных с помощью функции OPENXML Transact-SQL вставляются записи из документа XML, все невостребованные данные из исходного документа XML могут быть сохранены в столбце. При считывании данных из базы данных с помощью схем с заметками можно указывать атрибут sql:overflow-field для идентификации столбца таблицы, в котором хранятся перегруженные данные. Атрибут sql:overflow-field можно указать для <element>.

Затем эти данные можно получить одним из трех способов.

  • Атрибуты, сохраненные в столбце переполнения, добавляются к элементу, который содержит заметку sql:overflow-field.

  • Дочерние элементы и их потомки, хранимые в столбце переполнения базы данных, добавляются в качестве дочерних элементов вслед за содержимым, которое явным образом указывается в схеме. (Порядок не сохраняется).

Примеры

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

А. Указание sql:overflow-field для элемента

В данном примере предполагается, что был выполнен следующий сценарий, а значит, в базе данных tempdb имеется таблица Customers2:

USE tempdb
CREATE TABLE Customers2
 (CustomerID       VARCHAR(10),
 ContactName    VARCHAR(30),
 AddressOverflow    NVARCHAR(500))

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

Кроме того, необходимо создать виртуальный каталог для базы данных tempdb – и виртуальное имя шаблона типа template с именем «template».

В следующем примере схема сопоставления получает невостребованные данные, которые сохраняются в столбце AddressOverflow таблицы Customers2:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

  <xsd:element name="Customers2" sql:overflow-field="AddressOverflow" >
    <xsd:complexType>
      <xsd:attribute name="CustomerID"  type="xsd:integer"/>
      <xsd:attribute name="ContactName"  type="xsd:string" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Проверка образца запроса XPath к схеме

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните этот файл под именем OverflowT.xml в том же каталоге, где вы сохранили файл Overflow.xml. Запрос в шаблоне выбирает записи таблицы Customers2.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="Overflow.xml">
            /Customers2
        </sql:xpath-query>
    </ROOT>
    

    Путь к каталогу для схемы сопоставления (Overflow.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\Overflow.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>