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


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

Применимо к:база данных SQL ServerAzure SQL

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

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

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

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

Примеры

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

A. Указание 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".

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