1 / 13

Модуль 3

Модуль 3. Работа с XML. Модуль 3: Работа с XML. Использование типа данных XML Извлечение XML-данных с помощью предложения FOR XML Дробление XML-данных с помощью функции OPENXML. Тип данных XML. Системный тип данных для XML. Позволяет хранить XML документы и фрагменты.

sevita
Download Presentation

Модуль 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Модуль 3 Работа с XML

  2. Модуль 3: Работа с XML Использование типа данных XML Извлечение XML-данных с помощью предложения FOR XML Дробление XML-данных с помощью функции OPENXML

  3. Тип данных XML • Системный тип данных дляXML • Позволяет хранитьXML документы и фрагменты • Используется для таблиц, переменных или параметров • Предоставляет методы для запросов и измененияXML -- usage within table definition CREATE TABLE NewTable ( Col1 int primary key, Col2 xml ) -- usage as local variable declare @data xml -- usage as parameter to stored procedure CREATE PROCEDURE SaveData(@doc xml) AS ...

  4. Методы Query, Value, Exist, Modify и Nodes • Queryвозвращает нетипизированныйXML • Valueвозвращает скалярное значение • Existпроверяет существование значения • Modifyдобавляет, изменяет и удаляет узлы в XML документе • Nodesдробит xml переменную в реляционные данные SELECT nCol.value('../@OrderID[1]', 'int') ID, nCol.value('@ProductID[1]', 'int') Prod FROM Orders CROSS APPLY OrderDoc.nodes('/Order/LineItem') AS nTable(nCol)

  5. Модуль 3: Работа с XML Использование типа данных XML Извлечение XML-данных с помощью предложения FOR XML Дробление XML-данных с помощью функции OPENXML

  6. Режим запроса RAW • XML представление набора строк • Содержит либо элементы, либо атрибуты • Опционально корневого элемента и имени элемента строки SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID FROM Customer Cust JOIN SalesOrderHeader [Order] ON Cust.CustomerID = [Order].CustomerID ORDER BY Cust.CustomerID FOR XML RAW SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID FROM Customer Cust JOIN SalesOrderHeader [Order] ON Cust.CustomerID = [Order].CustomerID ORDER BY Cust.CustomerID FOR XML RAW, ELEMENTS SELECT Cust.CustomerIDCustID, CustomerType, SalesOrderID FROM Customer Cust JOIN SalesOrderHeader [Order] ON Cust.CustomerID = [Order].CustomerID ORDER BY Cust.CustomerID FOR XML RAW('Order'), ROOT('Orders') <row CustID="1" CustomerType="S" SalesOrderID="43860"/> <row CustID="1" CustomerType="S" SalesOrderID="44501"/> ... <row> <CustID>1</CustID> <CustomerType>S</CustomerType> <SalesOrderID>43860</SalesOrderID> </row>... <Orders> <Order><CustID>1</CustID><CustomerType>S</... </Order> ... </Orders>

  7. Режим запроса AUTO XML представление объектов данных SELECT Cust.CustomerID, OrderHeader.CustomerID, OrderHeader.SalesOrderID, OrderHeader.Status, Cust.CustomerType FROM Sales.CustomerCust, Sales.SalesOrderHeaderOrderHeader WHERE Cust.CustomerID = OrderHeader.CustomerID ORDER BY Cust.CustomerID FOR XML AUTO <CustCustomerID="1" CustomerType="S"> <OrderHeaderCustomerID="1" SalesOrderID="43860" Status="5" /> <OrderHeaderCustomerID="1" SalesOrderID="44501" Status="5" /> <OrderHeaderCustomerID="1" SalesOrderID="45283" Status="5" /> <OrderHeaderCustomerID="1" SalesOrderID="46042" Status="5" /> </Cust> ...

  8. Режим запроса EXPLICIT • Табличное представлениеXML документа • Допускает полный контроль форматаXML SELECT 1 AS Tag, NULL AS Parent, SalesOrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM SalesOrderHeader FOR XML EXPLICIT SELECT 1 AS Tag, NULL AS Parent, SalesOrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM SalesOrderHeader FOR XML EXPLICIT Атрибут <Invoice InvoiceNo="43659"> <Date>2001-07-01T00:00:00</Date> </Invoice> <Invoice InvoiceNo="43660">... <Invoice InvoiceNo="43659"> <Date>2001-07-01T00:00:00</Date> </Invoice> <Invoice InvoiceNo="43660">... Элемент

  9. Режим запроса PATH • ПрименениеXML Path Language (XPath) для задания формата XML • Возможно создание вложенных данных • Легче в использовании, чемрежим EXPLICIT SELECT EmployeeID "@EmpID", FirstName "EmpName/First", LastName "EmpName/Last" FROM Person.Contact INNER JOIN Employee ON Person.Contact.ContactID = Employee.ContactID FOR XML PATH <row EmpID="1"> <EmpName> <First>Guy</First> <Last>Gilbert</Last> </EmpName> </row> ...

  10. Извлечение вложенных XML–данных • В режиме AUTO только атрибуты или элементы • Внутренний запросFOR XML с параметромTYPE для возвращенияданных типа xml • РежимEXPLICIT с выражениемUNION ALL SELECT 1 AS Tag, NULL AS Parent, ... FROM SalesOrderHeader UNION ALL SELECT 2 AS Tag, 1 AS Parent, ... FROM SalesOrderDetail OD JOIN ... FOR XML EXPLICIT <Invoice InvoiceNo="43659"> <Date>2001-07-01T00:00:00</Date> <LineItem ProductID="709">Bike Socks, M</LineItem> <LineItem ProductID="711">Helmet, Blue</LineItem> </Invoice>...

  11. Модуль 3: Работа с XML Использование типа данных XML Извлечение XML-данных с помощью предложения FOR XML Дробление XML-данных с помощью функции OPENXML

  12. Создание представления внутреннего дерева с помощью sp_xml_preparedocument 2 Извлечение набора строк с помощью OPENXML 3 Дробление данных в таблицы 4 Обзор процедуры дробления данных Получение документа XML 1 Очистка памяти с помощью sp_xml_removedocument 5

  13. Синтаксис функции OPENXML ColPatternопределяетSalesOrderID, Status иOrderDate <Customer CustomerID="1" CustomerType="S"> <Order SalesOrderID="43860" Status="5" OrderDate="2001-08-01T00:00:00"> <OrderDetail ProductID="761" Quantity="2"/> <OrderDetail ProductID="770" Quantity="1"/> </Order> </Customer> По умолчанию атрибуты rowpatternопределяет уровень узлов SELECT * FROM OPENXML (@idoc, '/Customer/Order/OrderDetail', 1) WITH (CustomerID int '../../@CustomerID', OrderID int '../@SalesOrderID', OrderDate datetime '../@OrderDate', ProdID int '@ProductID', Quantity int) Из элемента Customer Из элемента Order Значение по умолчанию для атрибута Quantity Из элемента OrderDetail

More Related