CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy zamierzasz pobrać Internet Explorer 9?


CentrumXP.pl » Microsoft .NET » Kurs SQL » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

19. XML i XQuery

Autor: Grzegorz Chuchra    Opublikowano: 14 czerwca 2006    Odsłon: 22101    »Skomentuj...
Strona 1 z 2  Następna»
Zobacz również:

01. SQL Server 2005 Express - Wstęp do kursu

02. Instalacja. Opis elementów wchodzących w skład SQL Server 2005.

03. SQL Server - instalacja krok po kroku

04. Pierwszy kontakt. Czyli czym jest baza danych i jak z niej korzystać.

05. Wstęp do relacyjnych baz danych. Sposób organizacji danych danych.

06. Klucze główne i obce

07. Normalizacja baz danych

08. Co to jest typ danych? Jakie typy danych dostarcza nam SQL Server 2005.

09. Z teorii do praktyki czyli "Data Definition Language"

10. Operacje na danych "Data Manipulation Language".

11. Filtracja danych

12. Funkcje agregujące

13. Łączenie tabel

14. Praca z podzapytańami, tabelami tymczasowymi i zmiennymi tabelarycznymi

15. Nowości w "Data Control Language", czyli parę słów o schematach

16. Transakcje

17. Nowości w SQL Server 2005

18. Procedury składowalne i funkcje bazodanowe

20. Użycie .NET CLR w SQL Server 2005

»Uzyskaj pomoc na forum

Microsoft SQL Server 2000 umożliwiał export relacyjnych danych z i do XML. Jednakże jedynym sposobem na przechowywanie danych typu XML było pole typu string. Jest to bardzo nieefektywny sposób przechowywania tego typu danych. Ograniczenia jakie to powoduje można mnożyć:

  1. brak możliwości sprawdzenia poprawności XML
  2. brak możliwości wyszukiwania odpowiednich tagów
  3. brak możliwości zmiany poszczególnych wartości

Oczywiście wszystkie te problemy można ominąć poprzez napisanie odpowiednich funkcji bazodanowych. Ale żadna z tych opcji nie jest udostępniona przez starszą wersje serwera.

Większość tych ograniczeń została usunięta w SQL Server 2005 dzięki wprowadzanie typu danych XML. Pole to może być indeksowane, zmieniane i oczywiście bez żadnych problemów przeglądane. Dodatkowo został udostępniony nowy język XQuery, za pomocą którego możemy bezpośrednio manipulować na danych, zmieniać dane zaszyte wewnątrz któregoś z pól XML oraz wyciągać pojedyncze wartości.
Jak wcześniej wspomniałem głównym zastosowaniem XML jest komunikacja. Zacznijmy więc od bardzo życiowego przypadku. Jesteśmy administratorem bazy danych w firmie AdventureWorks i dostaliśmy bezpośrednie polecenia na utworzenie bilansu sprzedaży każdego z produktów. Ponieważ nasz przełożony używa Excela musimy mu podać dane w takim formacie, aby program ten bez problemu mógł sobie z nimi poradzić. Oczywiście rozwiązaniem naszego problemu będzie XML. Najpierw musimy stworzyć odpowiednie zapytanie, ale to już nie powinno nam sprawić problemów.

SELECT [Production].[Product].[Name], SUM(OrderQty) AS Quantity
FROM [Sales].[SalesOrderHeader]
            INNER JOIN [Sales].[SalesOrderDetail]
                        ON [Sales].[SalesOrderHeader].[SalesOrderID] = [Sales].[SalesOrderDetail].[SalesOrderID]
            INNER JOIN [Production].[Product]
                        ON [Production].[Product].[ProductID] = [Sales].[SalesOrderDetail].[ProductID]
GROUP BY [Production].[Product].ProductID, [Production].[Product].[Name]
ORDER BY Quantity DESC

Teraz wystarczy dodać do naszego zapytania klauzulę FOR XML AUTO i już mamy gotowy plik, który możemy bezpośrednio wysłać do osoby zamawiającej.

SELECT [Production].[Product].[Name], SUM(OrderQty) AS Quantity
FROM [Sales].[SalesOrderHeader]
            INNER JOIN [Sales].[SalesOrderDetail]
                        ON [Sales].[SalesOrderHeader].[SalesOrderID] = [Sales].[SalesOrderDetail].[SalesOrderID]
            INNER JOIN [Production].[Product]
                        ON [Production].[Product].[ProductID] = [Sales].[SalesOrderDetail].[ProductID]
GROUP BY [Production].[Product].ProductID, [Production].[Product].[Name]
ORDER BY Quantity DESC
FOR XML AUTO

Jak widać, nie ma potrzeby rozpisywać się, jak działa powyższa składnia. Poprzez proste dodanie do zapytanie klauzuli otrzymujemy wynik w postaci XML. Gdy dodamy do naszej opcji FOR XML AUTO dodatkową instrukcję  ELEMENTS, będziemy mogli zmienić sposób organizacji danych. Nie mamy już jednego elementu i dane jako atrybuty, lecz dane które wcześniej były atrybutami teraz są jak elementy w nagłówku Produkt.

SELECT [Production].[Product].[Name], SUM(OrderQty) AS Quantity
FROM [Sales].[SalesOrderHeader]
            INNER JOIN [Sales].[SalesOrderDetail]
                        ON [Sales].[SalesOrderHeader].[SalesOrderID] = [Sales].[SalesOrderDetail].[SalesOrderID]
            INNER JOIN [Production].[Product]
                        ON [Production].[Product].[ProductID] = [Sales].[SalesOrderDetail].[ProductID]
GROUP BY [Production].[Product].ProductID, [Production].[Product].[Name]
ORDER BY Quantity DESCFOR XML AUTO, ELEMENTS

Dzięki użyciu nowej opcji TYPE w klauzuli FOR XML mamy możliwość traktowania wyników jako pojedynczej kolumny w głównym zapytaniu z informacją o nagłówku.

Kolejną nową opcją, do jakiej mamy dostęp w opcji FOR XML jest PATH. Ułątwia ona bardziej świadome tworzenie konstrukcji XML z możliwością tworzenia pojedynczych pól typu XML wewnątrz tabel. Poniższy przykład pokazuje, jak możemy stworzyć z danych już istniejących tabelę z polem XML.

SELECT TOP 2 SalesOrderHeader.SalesOrderID AS SalesOrderID,
            OrderDate AS OrderDate,
            CustomerID AS CustomerID,
            (SELECT ProductID AS '@ProductID',
                        OrderQty AS '@OrderQty',
                        UnitPrice AS '@UnitPrice'
            FROM Sales.SalesOrderDetail AS SalesOrderDetail
            WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
            FOR XML PATH ('SalesOrderDetail'), type) AS 'ProductsLine'
FROM Sales.SalesOrderHeader AS SalesOrderHeader
FOR XML PATH ('SalesOrderHeader')

Skrypt ten wymaga małego wyjaśnienia. Po pierwsze: nazwa kolumny określa ścieżkę w XML. Argument za opcją Path określa nazwę kolumny. Prefiks @ mówi, że kolumna wynikowa jest atrybutem, a nie elementem w polu XML.


1 2 Dalej» 

Aktualna ocena to: 2,12

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!

Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do 19. XML i XQuery

Dodaj komentarz»

Nie napisano jeszcze ani jednego komentarza. Twój może być pierwszy...


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2012 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plXboxSpot.pl  |  Jama Mastaha