Получение невостребованных данных с помощью sql:overflow-field (SQLXML 4.0)
Область применения: SQL Server База данных SQL Azure
Когда записи вставляются в базу данных из XML-документа с помощью функции Transact-SQL OPENXML, все неуправляемые данные из исходного XML-документа можно хранить в столбце. При получении данных из базы данных с помощью аннотированных схем можно указать атрибут sql:overflow-field для идентификации столбца в таблице, в которой хранятся данные переполнения. Атрибут sql:overflow-field можно указать в <элементе>.
Затем эти данные можно получить одним из трех способов.
Атрибуты, хранящиеся в столбце переполнения, добавляются в элемент, содержащий заметку 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.
В следующем примере схема сопоставления получает невостребованные данные, которые сохраняются в столбце 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>