русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Дополнительная информация


Дата добавления: 2013-12-23; просмотров: 1059; Нарушение авторских прав


Дополнительную информацию о режиме EXPLICIT универсальных таблицах см. “Using EXPLICIT Mode” в SQL Server Books Online.


Запросы в режиме PATH

 

Введение

Режим PATH позволяет получить настроенный XML-документ при использовании синтаксиса XPath, чтобы значения соответствовали атрибутам, элементам, подэлементам, текстовым узлам и значениям данных. Эта способность соотнести столбцы таблиц с узлами XML-документа позволяют получить сложный XML без сложности запроса в режиме EXPLICIT.

Рассмотрите следующие особенности синтаксиса XPath:

■ XML узлы в дереве выражаются как пути, отделенные символами /.

■ Атрибуты обозначаются символами @ в начале имени атрибута.

■ Для обозначения относительных путей можно использовать одну точку (.), чтобы представить текущий узел и две точки (..), чтобы представить родителя текущего узла.

Получение данных при использовании режима PATH

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

SELECT EmployeeID "@EmpID",

FirstName "EmpName/First",

LastName "EmpName/Last"

FROM Person.Contact INNER JOIN

Employee ON Person.Contact.ContactID = Employee.ContactID

FOR XML PATH

Этот запрос позволяет получить фрагмент XML в формате, показанном в следующем примере.

<row EmpID="1">

<EmpName>

<First>Guy</First>

<Last>Gilbert</Last>

</EmpName>

</row>

<row EmpID="2">

<EmpName>

<First>Kevin</First>

<Last>Browne</Last>

</EmpName>

</row>

Заметьте, что столбец EmployeeID соответствует атрибуту EmpID со знаком @. Столбцы FirstName и LastName соответствуют подэлементам элемента EmpName.



Изменение имени элемента row

Следующий пример показывает, как Вы можете использовать дополнительный аргумент ElementName режима PATH, чтобы изменить название элемента строки, принятого по умолчанию.

SELECT EmployeeID "@EmpID",

FirstName "EmpName/First",

LastName "EmpName/Last"

FROM Person.Contact INNER JOIN

Employee ON Person.Contact.ContactID = Employee.ContactID

FOR XML PATH('Employee')

Этот запрос позволяет получить фрагмент XML в формате, показанном в следующем примере.

<Employee EmpID="1">

<EmpName>

<First>Guy</First>

<Last>Gilbert</Last>

</EmpName>

</Employee>

<Employee EmpID="2">

<EmpName>

<First>Kevin</First>

<Last>Browne</Last>

</EmpName>

</Employee>

 

Заметьте, что столбец EmployeeIDсоответствует атрибуту EmpID (@EmpID), а столбцы FirstNameи LastNameсоответствуют подэлементам элемента EmpName(EmpName/Firstи EmpName/Last).

Синтаксис для получения вложенных XML-документов

 

Введение

Вложение XML позволяет Вам представить отношение родитель/потомок как иерархию XML — например, клиенты и их заказы, или заказы и их пункты. Есть несколько способов вложения элементов XML при использовании фразы FOR XML, включая:

■ Определение соединений в запросах режима AUTO

■ Определение опции TYPE в подзапросах, чтобы получить значения типа xml

■ Объединение множества универсальных таблиц при использовании UNION ALL в запросах в режиме EXPLICIT

Использование режима AUTO для получения вложенных XML

Когда Вы определяете JOIN в запросе в режиме AUTO, SQL Server вкладывает получающиеся элементы, которые соответствуют таблицам в том порядке, в котором они появляются во фразе SELECT.

Режим AUTO позволяет определить, соответствуют ли столбцы элементам или атрибутам во XML фрагменте при использовании опции ELEMENTS. Однако, Вы можете определить только одну опцию для всего фрагмента, обеспечивая ограниченный контроль над форматом вывода.

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

SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID

FROM Sales.Customer Cust JOIN Sales.SalesOrderHeader [Order]

ON Cust.CustomerID = [Order].CustomerID

ORDER BY Cust.CustomerID

FOR XML AUTO

Этот запрос позволяет получить фрагмент XML в формате, показанном в следующем примере.

<Cust CustID="1" CustomerType="S">

<Order SalesOrderID="43860"/>

<Order SalesOrderID="44501"/>

</Cust>

Добавление опции ELEMENTS к предыдущему оператору Transact-SQL позволило бы вывести следующий документ.

<Cust>

<CustID>1</CustID>

<CustomerType>S</CustomerType>

<Order>

<SalesOrderID>43860</SalesOrderID>

</Order>

<Order>

<SalesOrderID>44501</SalesOrderID>

</Order>

</Cust>

...

Использование TYPE для получения типа данных xml в подзапросе

SQL Server 2005 включает тип данныхxml. Определение директивы TYPE в запросе FOR XML возвращает результаты как xmlзначение вместо строки типа varchar. Наиболее существенное воздействие этого - способность вложения запросов FOR XML, чтобы получить многоуровневый XML в запросах в режимах AUTO и RAW. Следующий пример показывает, как использовать директиву TYPE, чтобы вкладывать запросы FOR XML.

SELECT Name CategoryName,

(SELECT Name SubCategoryName

FROM Production.ProductSubCategory SubCategory

WHERE SubCategory.ProductCategoryID=Category.ProductCategoryID

FOR XML AUTO, TYPE, ELEMENTS)

FROM Production.ProductCategory Category

FOR XML AUTO

 

Результат предыдущего запроса показывается в этом примере.

<Category CategoryName="Accessories">

<SubCategory>

<SubCategoryName>Bike Racks</SubCategoryName>

</SubCategory>

<SubCategory>

<SubCategoryName>Bike Stands</SubCategoryName>

</SubCategory>

</Category>

...

 

Иначе, если бы внешний запрос не содержал фразы FOR XML AUTO, в выводе появился бы столбец с подкатегориями, содержащий xml данные.

CategoryName

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

Accessories <SubCategory><SubCategoryName>Bike

Racks</SubCategoryName></SubCategory><SubCategory>

<SubCategoryName>Bike Stands</SubCategoryName>

</SubCategory>

 

Столбец с xmlданными не имеет имени, потому что запрос не определяет псевдоним для внутреннего SELECT.

Дополнительная информация.Дополнительную информацию об использовании директивы TYPE, см. “TYPE Directive in FOR XML Queries” в SQL Server Books Online.

Вложение таблиц при использовании режима EXPLICIT

Чтобы использовать режим EXPLICIT для получения XML документа, содержащего множество тегов, Вы должны написать индивидуальные запросы для каждого тега и затем слить их при использовании оператора UNION ALL.

Рассмотрите следующие требования использования оператора UNION ALL в запросах режима EXPLICIT:

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

■ Вы должны использовать фразу ORDER BY, чтобы слить результаты в правильной XML иерархии.

Например, XML документ-счет мог бы потребовать следующего формата.

<Invoice InvoiceNo="43659">

<Date>2001-07-01T00:00:00</Date>

<LineItem ProductID="709">Bike Socks, M</LineItem>

<LineItem ProductID="711">Helmet, Blue</LineItem>

</Invoice>

 

Поскольку этот формат содержит два элемента XML (Invoiceи LineItem), которые соответствуют таблицам или представлениям, Вы должны использовать два запроса, чтобы получить данные. Первый запрос должен произвести элемент Invoice, который содержит атрибут InvoiceNoи дочерний элемент Date. Поскольку запрос будет объединен с другим запросом с использованием оператора UNION ALL, Вы должны также определить столбцы для ProductIDи Name, которые возвращаются в другом запросе.

Второй запрос должен получить подэлементы LineItemвнутри элемента Invoice. Они содержат ProductIDи Name, назначенное как значение элемента LineItem. Вы должны также получить OrderID,чтобысоединить пункты с их заказами.

Следующий пример показывает, как нужно объединить два запроса при использовании оператора UNION, чтобы получить элементы Invoiceи LineItem, чтобы получить предыдущий XML-документ.

SELECT 1 AS Tag,

NULL AS Parent,

SalesOrderID AS [Invoice!1!InvoiceNo],

OrderDate AS [Invoice!1!Date!Element],

NULL AS [LineItem!2!ProductID],

NULL AS [LineItem!2]

FROM Sales.SalesOrderHeader

UNION ALL

SELECT 2 AS Tag, 21

1 AS Parent,

OrderDetail.SalesOrderID,

NULL,

OrderDetail.ProductID,

Product.Name

FROM Sales.SalesOrderDetail OrderDetail JOIN

Sales.SalesOrderHeader OrderHeader

ON OrderDetail.SalesOrderID= OrderHeader.SalesOrderID

JOIN Production.Product Product

ON OrderDetail.ProductID = Product.ProductID

ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID]

FOR XML EXPLICIT

 

Лекция 4
Разбор документов XML с использованием синтаксиса OPENXML

 

Введение

Набор строк содержит результат запроса в виде таблицы. В сценарии для обмена данными с торговым партнером, Вы, возможно, должны будете сгенерировать набор строк из документа XML. Например, розничный продавец мог бы послать заказы поставщику как документы XML. Поставщик должен тогда сгенерировать набор строк из XML-документа, чтобы вставить данные в одну или более таблиц в базе данных. Процесс преобразования данных XML в набор строк известен как "разбор" данных XML.

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

Порядок разбора данных XML

 

Преобразование данных XML в набор строк включает следующие пять шагов:

1. Получите документ XML.Когда приложение получает документ XML, возможна обработка документа при использовании кода Transact-SQL. Например, когда поставщик получает заказ XML от розничного продавца, поставщик регистрирует заказ в базе данных SQL Server. Чтобы обработать данные XML, обычно выполняется код Transact-SQL в форме хранимой процедуры, где строка XML передается как параметр.

2. Сгенерируйте внутреннее представление дерева.Используйте хранимую процедуруsp_xml_preparedocument, чтобы разобрать документ XML и преобразовать его в памяти в древовидную структуру прежде, чем обработать документ. Дерево концептуально подобно представлению документа XML согласно Data Object Document (DOM). Вы можете использовать только правильно построенный документ XML, чтобы сгенерировать внутреннее дерево.

3. Сформируйте набор строк из дерева.Вы используете функцию OPENXML, чтобы сгенерировать в памяти набор строк из данных в дереве. Используйте синтаксис запросов XPath, чтобы определить узлы дерева, которые будут возвращаться в наборе строк.

4. Обработайте данные набора строк.Используйте набор строк, созданный OPENXML, для обработки данных любыми средствами, применяемыми для наборов строк. Вы можете выбирать, обновлять или удалять данные, используя операторы Transact-SQL. Обычно OPENXML используется для вставки данных в постоянные таблицы базы данных. Например, заказ XML, полученный поставщиком, мог бы содержать данные, которые должны быть вставлены в таблицы SalesOrderHeaderи SalesOrderDetail.

5. Удалите внутреннее дерево. Когда дерево больше не требуется, используйте для освобождения памяти хранимую процедуру sp_xml_removedocument.



<== предыдущая лекция | следующая лекция ==>
DROP DATABASE TestDB1 | Создание дерева с помощью хранимой процедуры sp_xml_preparedocument


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.