Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции SQL Server.docx
Скачиваний:
49
Добавлен:
24.09.2019
Размер:
4.09 Mб
Скачать

Примеры a. Использование простой инструкции select с openxml

В следующем примере создается внутреннее представление образа XML с помощью процедуры sp_xml_preparedocument. Инструкция SELECT, которая использует поставщик набора строк OPENXML, выполняется для внутреннего представления XML-документа.

Значение аргумента flag устанавливается в 1. Это свидетельствует об атрибутивной модели сопоставления. Поэтому, XML-атрибуты сопоставляются столбцам набора строк. Аргумент rowpattern, заданный как /ROOT/Customer, указывает, какие узлы <Customers> должны обрабатываться.

Необязательный аргумент ColPattern (шаблон столбцов) не задан, так как имя столбца совпадает с именами XML-атрибутов.

Поставщик набора строк OPENXML создает набор строк с двумя столбцами (CustomerID и ContactName), из которых инструкция SELECT извлекает необходимые столбцы (в данном случае, все столбцы).

DECLARE @idoc int

DECLARE @doc varchar(1000)

SET @doc ='

<ROOT>

<Customer CustomerID="VINET" ContactName="Paul Henriot">

<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">

<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>

<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>

</Order>

</Customer>

<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">

<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">

<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>

</Order>

</Customer>

</ROOT>'

--Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement that uses the OPENXML rowset provider.

SELECT *

FROM OPENXML (@idoc, '/ROOT/Customer',1)

WITH (CustomerID varchar(10),

ContactName varchar(20))

Ниже приводится результирующий набор.

CustomerID ContactName

---------- --------------------

VINET Paul Henriot

LILAS Carlos Gonzlez

Если выполняется та же инструкция SELECT с аргументом flags, установленным в значение 2 и указывающим на сопоставление с использованием элементов, значения аргументов CustomerID и ContactName для обоих клиентов в XML-документе возвращается как NULL, потому что элементы<Customers> не содержат вложенных элементов.

Ниже приводится результирующий набор.

CustomerID ContactName

---------- -----------

NULL NULL

NULL NULL

Б. Указание ColPattern для сопоставления столбцов xml-атрибутам

Следующий запрос возвращает идентификатор клиента, дату заказа, идентификатор продукта и количественные атрибуты XML-документа. Аргументrowpattern задает элементы <OrderDetails>ProductID и Quantity являются атрибутами элемента <OrderDetails>. Однако OrderIDCustomerID и OrderDateявляются атрибутами родительского элемента (<Orders>).

Необязательный аргумент ColPattern задан. Это указывает на следующее.

  • OrderIDCustomerID и OrderDate в наборе строк сопоставляются атрибутам родителя узлов, заданных аргументом rowpattern в XML-документе.

  • Столбец ProdID в наборе строк сопоставляется атрибуту ProductID, и столбец Qty в наборе строк сопоставляется атрибуту Quantity узлов, заданных в аргументе rowpattern.

Хотя сопоставление с использованием элементов задано в аргументе flags, сопоставление, заданное в аргументе ColPattern, переписывает это сопоставление.

DECLARE @idoc int

DECLARE @doc varchar(1000)

SET @doc ='

<ROOT>

<Customer CustomerID="VINET" ContactName="Paul Henriot">

<Order OrderID="10248" CustomerID="VINET" EmployeeID="5"

OrderDate="1996-07-04T00:00:00">

<OrderDetail ProductID="11" Quantity="12"/>

<OrderDetail ProductID="42" Quantity="10"/>

</Order>

</Customer>

<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">

<Order OrderID="10283" CustomerID="LILAS" EmployeeID="3"

OrderDate="1996-08-16T00:00:00">

<OrderDetail ProductID="72" Quantity="3"/>

</Order>

</Customer>

</ROOT>'

--Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- SELECT stmt using OPENXML rowset provider

SELECT *

FROM OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)

WITH (OrderID int '../@OrderID',

CustomerID varchar(10) '../@CustomerID',

OrderDate datetime '../@OrderDate',

ProdID int '@ProductID',

Qty int '@Quantity')

Ниже приводится результирующий набор.

OrderID CustomerID           OrderDate                 ProdID    Qty

------------------------------------------------------------------------

10248 VINET 1996-07-04 00:00:00.000 11 12

10248 VINET 1996-07-04 00:00:00.000 42 10

10283 LILAS 1996-08-16 00:00:00.000 72 3

Что такое Тип Данных xml?

Введение

Тип данных xml является родным типом данных для хранения XML документов или фрагментов в столбце, локальной переменной, или параметре до 2 гигабайтов. Способность к хранению XML непосредственно в реляционной базе данных имеет много преимуществ для разработчиков приложений.

Преимущества хранения XML в родном формате

Преимущества хранения XML включают:

■ И структурированные, и полуструктурированные данные хранятся в одном месте, облегчая управление ими.

■ Вы можете определить содержимое переменной в реляционной модели.

■ Вы можете выбрать самую подходящую модель данных для обеспечения специфических требований Вашего приложения, используя высоко оптимизированное хранилище данных и окружение запросов.

Функциональные возможности XML

Тип данных SQL Server 2005 xml хранит информационный набор документа XML в эффективном внутреннем формате. Данные можно рассматривать как оригинальный документ XML за исключением того, что не хранятся незначащие пробелы, порядок атрибутов, префиксы пространств имен и объявления XML. SQL Server 2005 обеспечивает следующие функциональные возможности для типа данных xml:

Индексирование XML. Столбцы, определенные как xml, могут быть проиндексированы при использовании индексов XML и полнотекстовые индексы. Это может значительно увеличить производительность запросов, которые получают данные XML.

Методы получения данных на основе запросов XQuery. Тип данных xml поддерживает методы query, value, и exist. Они могут использоваться, чтобы извлечь данные из XML при использовании выражений XQuery.

Модификация данных на основе запросов XQuery. Тип данных xml поддерживает метод modify, который использует расширение спецификации XQuery, чтобы выполнить обновления данных XML.

Типизированный XML. Это XML, который связан с некоторой схемой XML. Схема определяет элементы и атрибуты, которые разрешены в документе XML этого типа и определяет пространство имен для них. Когда используется тип данных xml, чтобы хранить типизированный XML, SQL Server проверяет соответствие XML-документа его схеме и оптимизирует внутреннее хранение данных, назначая соответствующие типы данных SQL Server тем данным, которые основаны на типах данных XML, определенных в схеме.