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