You are on page 1of 15

SQL Server 2005.

Zaawansowane
rozwizania biznesowe
Autor: Igor Kruk, Artur Mocicki
ISBN: 978-83-246-1333-5
Format: 158x235, stron: 312
Zdobd wiedz o tworzeniu zaawansowanych aplikacji bazodanowych!
Jak uywa tabel tymczasowych do tworzenia specjalnych hierarchii?
Do czego su zmienne tablicowe?
Na czym polega konwertowanie danych relacyjnych do formatu XML?

SQL Server 2005 to pierwsza wersja serwera, w ktrej dane XML s przechowywane
i przetwarzane faktycznie jako XML, a nie jako pochodne danych tekstowych
lub binarnych, jak to byo w wersjach poprzednich. W SQL Server 2005 moemy uy
typu danych XML jako kolumny, zmiennej lokalnej lub parametru. Moemy w niej
przechowywa cae dokumenty XML lub tylko ich fragmenty (niezawierajce elementu
gwnego, tzw. root node). Integracja z platform Microsoft NET oraz ulepszone funkcje
Business Intelligence pozwalaj programistom na skupienie si na najwaniejszych
zadaniach, bez koniecznoci pracy w nieznanym rodowisku, a przedsibiorstwom daj
moliwo przeksztacania informacji w lepsze rozwizania biznesowe.
Ksika SQL Server 2005. Zaawansowane rozwizania biznesowe przedstawia jeden
z najpopularniejszych serwerw bazodanowych sucych do budowy rnych
systemw informatycznych, czyli SQL Server 2005. Ten obszerny podrcznik zawiera
szczegowe informacje oraz przykady dotyczce wielowymiarowych baz danych
oraz wymaga, jakie mog pojawi si podczas budowy mechanizmw ich zasilania
danymi rdowymi. Czytajc go, dowiesz si, jak tworzy efektywne i wydajne
aplikacje oraz nauczysz si wdraa nowatorskie pomysy, ktre kademu
przedsibiorstwu przynios wymierne korzyci biznesowe.

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Perspektywy
Procedury i funkcje
Wyzwalacze
Dynamiczny SQL
Tabele tymczasowe i zmienne tablicowe
Transakcje i wyjtki w aplikacjach biznesowych
Full Text Search
XML
Database Mail
Rozwizania biznesowe
Integracja z .NET i CLR
SQL Server Integration Services

Dowiedz si, jak tworzy efektywne aplikacje bazodanowe


i wdraaj korzystne rozwizania programistyczne dla biznesu!

Spis tre!ci
Wst p .............................................................................................. 9
Rozdzia$ 1. Perspektywy .................................................................................. 11
Wst%p .............................................................................................................................. 11
Informacje oglne ........................................................................................................... 11
Sortowanie danych w perspektywie ............................................................................... 16
Od#wie!anie perspektyw ................................................................................................ 18
Opcje perspektywy ......................................................................................................... 21
ENCRYPTION ......................................................................................................... 21
SCHEMABINDING ................................................................................................ 22
CHECK OPTION ........................................................................................................... 23
Perspektywy indeksowane .............................................................................................. 25
Podsumowanie ................................................................................................................ 28

Rozdzia$ 2. Procedury i funkcje ........................................................................ 29


Wst%p .............................................................................................................................. 29
Oglne informacje na temat funkcji sk"adowanych ........................................................ 29
Wywo"ywanie funkcji a efektywno#+ zapyta' ................................................................ 32
U!ywanie funkcji w ograniczeniach ............................................................................... 34
Funkcje a ograniczenie DEFAULT .......................................................................... 34
Funkcje a ograniczenie UNIQUE ............................................................................. 36
Funkcje a ograniczenie PRIMARY KEY ................................................................. 37
Funkcje a ograniczenie CHECK ............................................................................... 37
Funkcje uruchamiane dla ka!dego wiersza ..................................................................... 38
Funkcje typu inline table-valued ..................................................................................... 39
Funkcje typu multi-statement table-valued ..................................................................... 41
Praktyczny przyk"ad obliczanie op&nie' .................................................................. 45
Korzy#ci wynikaj$ce z zastosowania funkcji .................................................................. 52
Oglne informacje o procedurach sk"adowanych ........................................................... 52
Parametry wej#ciowe procedury ..................................................................................... 55
Parametry wyj#ciowe procedury ..................................................................................... 56
Klauzula EXECUTE AS w procedurach ........................................................................ 57
Praktyczny przyk"ad alokacja samochodw na zasoby osobowe ............................... 58
Podsumowanie ................................................................................................................ 65

SQL Server 2005. Zaawansowane rozwiAzania biznesowe

Rozdzia$ 3. Wyzwalacze ................................................................................... 67


Wst%p .............................................................................................................................. 67
Informacje oglne ........................................................................................................... 67
Wyzwalacze typu AFTER .............................................................................................. 68
Tabele INSERTED i DELETED .................................................................................... 69
Identyfikacja rodzaju wyzwalacza .................................................................................. 70
Nieuruchamianie wyzwalaczy dla konkretnych instrukcji SQL ..................................... 72
CONTEXT_INFO kontekst sesji w SQL Server 2005 .............................................. 73
Rekurencyjne i zagnie!d!one wywo"ywanie wyzwalaczy .............................................. 75
Funkcja COLUMNS_UPDATED i predykat UPDATE
selektywne wywo"ywanie wyzwalaczy ................................................................... 78
Wyzwalacze INSTEAD OF ............................................................................................ 80
Operacje wykonywane w wyzwalaczu na wybranych wierszach ................................... 82
Wyzwalacze i perspektywy ............................................................................................ 85
Wyzwalacze uruchamiane na poziomie bazy danych ..................................................... 87
Wyzwalacze uruchamiane na poziomie serwera baz danych .......................................... 91
Podsumowanie ................................................................................................................ 92

Rozdzia$ 4. Dynamiczny SQL ............................................................................. 93


Wst%p .............................................................................................................................. 93
Informacje oglne ........................................................................................................... 93
EXEC ............................................................................................................................. 94
EXEC AT ....................................................................................................................... 99
sp_executesql ................................................................................................................ 100
Limit instrukcji ............................................................................................................. 102
Sp_executesql i ustawienia #rodowiskowe ................................................................... 102
Dynamiczne filtry ......................................................................................................... 103
Wstrzykiwanie SQL ..................................................................................................... 105
Dynamiczny pivot danych ............................................................................................ 110
Podsumowanie .............................................................................................................. 113

Rozdzia$ 5. Tabele tymczasowe i zmienne tablicowe ....................................... 115


Wst%p ............................................................................................................................ 115
Informacje oglne o tabelach tymczasowych ............................................................... 115
Globalne tabele tymczasowe ........................................................................................ 118
Zmienne tablicowe ....................................................................................................... 118
Baza tempdb ................................................................................................................. 120
Wyra!enia tablicowe .................................................................................................... 121
Podsumowanie .............................................................................................................. 122

Rozdzia$ 6. Transakcje i wyjAtki w aplikacjach biznesowych ............................ 123


Wst%p ............................................................................................................................ 123
Informacje oglne o transakcjach ................................................................................. 123
Blokady ........................................................................................................................ 125
Poziomy izolacji ........................................................................................................... 129
Poziom izolacji READ UNCOMMITTED ............................................................. 130
Poziom izolacji READ COMMITTED .................................................................. 131
Poziom izolacji SNAPSHOT ................................................................................. 132
Poziom izolacji READ COMMITTED SNAPSHOT ............................................. 134
Podsumowanie poziomw izolacji ......................................................................... 134
Poziomy zapisywania ................................................................................................... 134
Zakleszczenia ............................................................................................................... 135
Obs"uga b"%dw w aplikacjach biznesowych ................................................................ 137
Transakcje a obs"uga b"%dw ........................................................................................ 139
Podsumowanie .............................................................................................................. 140

Spis tre!ci

Rozdzia$ 7. Full-Text Search ........................................................................... 141


Wst%p ............................................................................................................................ 141
Us"uga Full-Text Search ............................................................................................... 142
Tworzenie, modyfikowanie i usuwanie katalogu typu Full-Text .................................. 143
Tworzenie katalogu Full-Text z wykorzystaniem kreatora .................................... 145
Tworzenie katalogu Full-Text z poziomu kodu T-SQL .......................................... 147
Modyfikowanie katalogu Full-Text ........................................................................ 148
Usuwanie katalogu Full-Text ................................................................................. 148
Tworzenie, modyfikowanie i usuwanie indeksw typu Full-Text ................................ 149
Tworzenie indeksu Full-Text z wykorzystaniem kreatora ...................................... 149
Tworzenie indeksu Full-Text z poziomu kodu T-SQL ........................................... 152
Modyfikowanie indeksu Full-Text ......................................................................... 153
Usuwanie indeksu Full-Text ................................................................................... 155
Noise Files .................................................................................................................... 155
Uzyskiwanie metadanych o katalogach i indeksach Full-Text ..................................... 155
Podstawowe wyszukiwanie informacji ......................................................................... 156
Polecenie CONTAINS ................................................................................................. 156
Wyszukiwanie podstawowe ................................................................................... 157
Wyszukiwanie z wykorzystaniem wieloznacznikw .............................................. 158
Wyszukiwanie wed"ug blisko#ci wyst$pienia s"w ................................................ 158
Wyszukiwanie z wykorzystaniem form fleksyjnych .............................................. 159
Wyszukiwanie z wykorzystaniem tezaurusa .......................................................... 159
Wyszukiwanie wed"ug wagi s"w .......................................................................... 160
Polecenie FREETEXT .................................................................................................. 161
Polecenie CONTAINSTABLE ..................................................................................... 162
Polecenie FREETEXTABLE ....................................................................................... 163
Wyszukiwanie informacji w plikach PDF .................................................................... 164
Podsumowanie .............................................................................................................. 166

Rozdzia$ 8. XML ............................................................................................ 167


Wst%p ............................................................................................................................ 167
Informacje o formacie XML ......................................................................................... 168
Przechowywanie danych XML w SQL Server 2005 .................................................... 168
Sprawdzanie poprawno#ci danych XML przy u!yciu schematw ................................ 170
Metody dost%pu do danych XML i ich obs"ugi ............................................................. 173
Metoda exist ........................................................................................................... 173
Metoda query ......................................................................................................... 174
Metoda value .......................................................................................................... 174
Metoda nodes ......................................................................................................... 175
Metoda modify ....................................................................................................... 176
Konwertowanie danych relacyjnych do formatu XML ................................................. 178
Polecenie FOR XML .............................................................................................. 178
Polecenie OPENXML ............................................................................................ 187
Podsumowanie .............................................................................................................. 190

Rozdzia$ 9. Database Mail .............................................................................. 191


Wst%p ............................................................................................................................ 191
Aktywowanie us"ugi Database Mail ............................................................................. 192
Konfigurowanie us"ugi Database Mail ......................................................................... 192
Testowanie us"ugi Database Mail ................................................................................. 198
Wysy"anie wiadomo#ci e-mail ...................................................................................... 199
Monitorowanie us"ugi Database Mail ........................................................................... 203
Dodatkowe procedury zwi$zane z us"ug$ Database Mail ............................................. 205
Podsumowanie .............................................................................................................. 205

SQL Server 2005. Zaawansowane rozwiAzania biznesowe

Rozdzia$ 10. RozwiAzania biznesowe ................................................................. 207


Wst%p ............................................................................................................................ 207
Pobieranie elementw z hierarchii wymiaru Parent-Child ............................................ 207
Rekurencyjne pobieranie elementw wymiarw .......................................................... 215
Generowanie tabeli wymiaru Multilevel na podstawie Parent-Child ............................ 221
Alternatywne hierarchie ............................................................................................... 230
Pobieranie informacji o tygodniach z przedzia"u czasowego ....................................... 233
Automatyczne wykrywanie nowych elementw wymiarw ......................................... 236
Szybki mechanizm odnajdowania zwielokrotnionych rekordw .................................. 238
Optymalizacja wstawiania danych i wi%zy integralno#ci .............................................. 238
Algorytm przeliczania danych ko'cowych, #rednich i przyrostowych
z akumulacji MTD na QTD i YTD ............................................................................ 240
Wykorzystanie j%zyka MDX .................................................................................. 241
Typy zasilanych danych ......................................................................................... 242
Podsumowanie .............................................................................................................. 244

Rozdzia$ 11. Integracja z .NET i CLR ................................................................. 245


Wst%p ............................................................................................................................ 245
Co to jest .NET i CLR? ................................................................................................ 246
Na czym polega integracja SQL Server 2005 z CLR? .................................................. 247
Kiedy u!ywa+ obiektw CLR? ..................................................................................... 248
Schemat u!ywania obiektw CLR ................................................................................ 249
W"$czenie obs"ugi obiektw CLR w SQL Server 2005 ................................................ 250
Przyk"ady obiektw CLR ............................................................................................. 251
UDF typu Scalar ..................................................................................................... 251
UDF typu Table-Value ........................................................................................... 257
User-Defined Trigger ............................................................................................. 263
User-Defined Type ................................................................................................. 267
User-Defined Aggregate ......................................................................................... 273
Zarz$dzanie obiektami ASSEMBLY ............................................................................ 277
Pobieranie metadanych o obiektach ASSEMBLY ................................................. 277
Zmiana poziomu zabezpiecze' ............................................................................... 279
Usuwanie obiektw ASSEMBLY .......................................................................... 280
Podsumowanie .............................................................................................................. 280

Rozdzia$ 12. SQL Server Integration Services .................................................... 281


Wst%p ............................................................................................................................ 281
Business Intelligence Development Studio ................................................................... 282
Architektura .................................................................................................................. 282
Control Flow ................................................................................................................. 282
Kontenery ............................................................................................................... 283
Zadania ................................................................................................................... 283
Procedury przep"ywu zada' ................................................................................... 286
Data Flow ..................................................................................................................... 286
Yrd"a ..................................................................................................................... 287
Transformacje ........................................................................................................ 287
Destinations ............................................................................................................ 290
Event Handlers ............................................................................................................. 290
Variables ................................................................................................................ 291
Deployment .................................................................................................................. 291
Bezpiecze'stwo SSIS ................................................................................................... 296
Migracja DTS 2000 do SSIS 2005 ............................................................................... 297
Logowanie .................................................................................................................... 297
Podsumowanie .............................................................................................................. 299

Skorowidz ....................................................................................................... 301

Rozdzia 8.

XML
Wstp
SQL Server 2005 to pierwsza wersja serwera, w ktrej dane XML s przechowywane
i przetwarzane faktycznie jako XML, a nie jako pochodne danych tekstowych lub binarnych, jak to byo w poprzednich wersjach serwera. Zaadowanie danych XML np.
w SQL Server 2000 byo stosunkowo proste, jednak ju dostp do tych danych, modyfikowanie i wyszukiwanie konkretnych obiektw wymagay zoonych operacji.
SQL Server 2000 umoliwia wykonanie tylko dwch polece zwizanych z obsug
formatu XML:
OPENXML umoliwia zaadowanie dokumentu XML do pamici SQL Servera,

a nastpnie utworzenie z niego zbioru rekordw relacyjnych.


FOR XML umoliwia zapis danych relacyjnych, bdcych wynikiem zapytania

SQL do postaci XML.


Wkrtce po dacie premiery SQL Server 2000 Microsoft zrozumia, e jego najnowsza
platforma bazodanowa nie wspiera obsugi danych i formatu XML na tyle, by sprosta
oczekiwaniom i wymaganiom biznesowych uytkownikw i twrcw aplikacji w tym
zakresie. Widzc, jak wanym formatem w wiecie biznesowych aplikacji bazodanowych sta si XML, Microsoft chcia za wszelk cen zwikszy jego integracj
z SQL Server 2000. Jednak po oficjalnej premierze serwera firma moga zaproponowa
tylko darmowe dodatki pakiety, ktre rozszerzay SQL Server w tym zakresie. Pierwszym takim pakietem by SQLXML (XML for SQL Server), ktry dostarcza m.in. narzdzia do bardzo szybkiego wczytywania danych XML. Kolejnym pakietem by MSXML
(Microsoft XML Core Services), ktry zawiera m.in. parser XML. Ju wtedy jasne byo,
e w kolejnej wersji SQL Server musi nastpi rewolucja w podejciu do formatu XML.
Integracj XML z SQL Server 2005 naley rozpatrywa w nastpujcych obszarach:
nowy typ danych XML,
ograniczenia w kolumnach typu XML,

168

SQL Server 2005. Zaawansowane rozwizania biznesowe


XML Schema Collection,
metody dostpu i obsugi danych XML.

Powyszym zagadnieniom powicony zosta ten rozdzia ksiki. Zanim jednak zajmiemy si szczegami tych zagadnie, przypomnijmy sobie podstawowe informacje
na temat danych, plikw i formatu XML.

Informacje o formacie XML


Skrt XML pochodzi od Extensible Markup Language (z ang.: rozszerzalny jzyk znacznikw). Jzyk ten suy do atwego przechowywania i wymiany danych pomidzy
rnymi aplikacjami, systemami i platformami. Format XML jest obecnie wykorzystywany w wielu obszarach informatycznych. Swoj popularno zawdzicza temu, e jest
stosunkowo prosty do zrozumienia oraz e zapisywany jest w postaci plikw tekstowych. Czyni go to bardzo atwo edytowalnym. Niewtpliw zalet formatu XML jest
take fakt, e umoliwia on separacj warstwy danych od warstwy prezentacji. atwo
zrozumie to przy porwnaniu go z jzykiem HTML, w ktrym poszczeglne tagi
okrelaj, w jaki sposb zawarte w pliku dane s prezentowane. XML take skada si
z tagw (elementw), jednak w tym przypadku opisuj one przechowywane dane, nie
mwic nic na temat ich prezentacji w aplikacjach czy przegldarce. O ile w HTML
mamy do dyspozycji zdefiniowany zbir tagw, np. <b>Igor Kruk</b>, w XML definiujemy wasne tagi na potrzeby danych, ktre chcemy w tym pliku zapisa, np. <FirstName>
Igor Kruk</FirstName>. Tak jak w HTML poszczeglne tagi maj swoje opcje, np.
<font color="black">, tak te w XML do elementw przypisywane s atrybuty, ktre
lepiej opisuj te elementy. W poniszym przykadzie przechowujcym dane o klientach uyte zostay atrybuty Gender (z ang.: pe) i Name (z ang.: nazwisko):
<Clients>
<Client Genre="M" Name="FirstClient" />
<Client Genre="F" Name="SecondClient" />
...
</Clients>

Przechowywanie danych XML


w SQL Server 2005
W SQL Server 2005 moemy uy typu danych XML jako kolumny, zmiennej lokalnej
lub parametru. W kolumnie tego typu moemy przechowywa cae dokumenty XML
lub tylko ich fragmenty (niezawierajce elementu gwnego, tzw. root node). Typu danych XML uywamy w taki sam sposb jak innych typw. Poniszy przykad tworzy
tabel myMixes, w ktrej bdziemy przechowywa dane na temat muzycznych megamiksw. W kolumnie Title zapisany bdzie tytu miksu, kolumna Tracklist bdzie
za przechowywaa list utworw w formacie XML:

Rozdzia 8. XML

169

CREATE TABLE myMixes


(MixID int IDENTITY(1,1) PRIMARY KEY,
Title varchar(255) NOT NULL,
Tracklist XML NULL)

Wstawimy teraz dane do utworzonej tabeli. W pierwszym przykadzie wykorzystana


zostaa instrukcja INSERT, w ktrej dane s wstawiane jako zwyky tekst i zamieniane
przy uyciu funkcji CAST na typ XML.
INSERT INTO myMixes (Title, Tracklist)
VALUES ('Party_Beats_Vol.2_mixed_by_Raven',
CAST('
<Mix>
<Tracks>
<Track id="1">Raven - Intro</Chapter>
<Track id="2">Track02 Title02</Chapter>
<Track id="3">Track03 Title03</Chapter>
<Track id="4">Track04 Title 04</Chapter>
</Tracks>
</Mix>' as XML
)
)

W drugim przykadzie deklarujemy zmienn mixInfo typu XML, przypisujemy jej warto, a nastpnie wstawiamy przy uyciu polecenia INSERT do tabeli myMixes:
DECLARE @mixInfo XML
SET @mixInfo =
CAST('
<Mix>
<Tracks>
<Track id="1">Raven <Track id="2">Track02
<Track id="3">Track03
<Track id="4">Track04
</Tracks>
</Mix>' as XML
)

Intro</Track>
Title02</Track>
Title03</Track>
Title 04</Track>

INSERT INTO myMixes (Title, Tracklist)


VALUES ('Orange_Dance_mixed_by_Raven', @mixInfo)

W obydwu przykadach dane zostay jawnie skonwertowane na typ XML. Podczas tej
konwersji SQL Server wykona tylko podstawowe sprawdzenie, czy dane maj format
XML, np. czy wszystkie tagi otwierajce maj odpowiednie tagi zamykajce. Nie sprawdza natomiast, czy maj one okrelon oczekiwan przez nas struktur. W powyszych przykadach struktura danych XML zakadaa istnienie elementw Mix, Tracks
i Track z atrybutem id. Gdybymy podjli prb wstawienia do tabeli myMixes danych
XML w innej strukturze, SQL Server nie zgosiby bdu, bo nie wie tak naprawd, jaka
powinna by struktura wstawianych danych. Do wprowadzania ogranicze na dane XML
su schematy XML.

170

SQL Server 2005. Zaawansowane rozwizania biznesowe

Sprawdzanie poprawnoci danych XML


przy uyciu schematw
Schematy XML (XML Schema Difinition) przechowywane s w plikach XSD. Zawieraj
one informacje, jak powinien wyglda poprawny plik XML zwizany z danym schematem. Schematy XML mog by wykorzystywane przez SQL Server 2005 do kontrolowania poprawnoci danych XML podczas ich dodawania i modyfikowania. Schematy
XML s przechowywane w SQL Server 2005 jako obiekty. List wszystkich dostpnych
schematw XML otrzymamy, wykonujc ponisze zapytanie:
SELECT * FROM sys.XML_schema_collections

Tworzenie obiektw danych typu XML wymaga zdefiniowania w bazie danych zbiorw
schematw. Suy do tego instrukcja CREATE XML SCHEMA COLLECTION. Instrukcja ta
tworzy zbir schematw mogcy skada si z jednego lub wicej schematw, z ktrych kady opisuje jedn przestrze nazw. Skadnia tego polecenia jest nastpujca:
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier
AS Expression

Polecenie przyjmuje dwa parametry. Pierwszy to unikalna nazwa schematu, drugi to


jego definicja.
List dostpnych w bazie danych schematw XML znajdziemy w lokalizacji: Nazwa
bazy danych/Programmability/Types/XML Schema Collections.
Zobaczmy jeden przykadowy schemat Production.ManuInstructionsSchemaCollection
z bazy AdventureWorks:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:t="http://schemas.
microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions"
elementFormDefault="qualified">
<xsd:element name="root">
<xsd:complexType mixed="true">
<xsd:complexContent mixed="true">
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Location" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:complexContent mixed="true">
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="step" type="t:StepType" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="LocationID" type="xsd:integer" use="required" />
<xsd:attribute name="SetupHours" type="xsd:decimal" />
<xsd:attribute name="MachineHours" type="xsd:decimal" />

Rozdzia 8. XML

171

<xsd:attribute name="LaborHours" type="xsd:decimal" />


<xsd:attribute name="LotSize" type="xsd:decimal" />
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="StepType" mixed="true">
<xsd:complexContent mixed="true">
<xsd:restriction base="xsd:anyType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="tool" type="xsd:string" />
<xsd:element name="material" type="xsd:string" />
<xsd:element name="blueprint" type="xsd:string" />
<xsd:element name="specs" type="xsd:string" />
<xsd:element name="diag" type="xsd:string" />
</xsd:choice>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>

W powyszym schemacie znajdziemy definicj elementu Location:


<xsd:element name="Location" maxOccurs="unbounded">

Elementowi temu przypisany jest atrybut LocationID:


<xsd:attribute name="LocationID" type="xsd:integer" use="required"/>

Parametr use="required" oznacza, e atrybut ten musi wystpi w pliku XML powizanym z tym schematem. Parametr type="xsd:integer" oznacza, e atrybut LocationID
musi by typu cakowitoliczbowego.
Sprbujmy teraz utworzy now tabel zawierajc kolumn typu XML, do ktrej
przypiszemy omawiany schemat. Nastpnie przetestujemy dziaanie sprawdzania poprawnoci wstawianych danych XML przez ten schemat.
Ponisze polecenie T-SQL tworzy tabel o nazwie TEST skadajc si z dwch kolumn:
identyfikatora wiersza i danych w formacie XML. Do tabeli przypisywany jest schemat
Production.ManuInstructionsSchemaCollection.
CREATE TABLE dbo.TEST
(
rowID int IDENTITY(1,1) PRIMARY KEY,
dane XML (Production.ManuInstructionsSchemaCollection) NULL
)

Pierwszy przykad wstawia do tabeli TEST dane XML zgodne z caym schematem
Production.ManuInstructionsSchemaCollection:

172

SQL Server 2005. Zaawansowane rozwizania biznesowe


INSERT INTO TEST (dane) VALUES (
CAST(
'<t:root xmlns:t="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions">
<t:Location LotSize="0.0" SetupHours="0.0" LocationID="1" MachineHours="0.0"
LaborHours="0.0">
<t:step>
<t:tool>String</t:tool>
</t:step>
</t:Location>
</t:root>' AS XML))

Jeli dokadnie przeanalizowalibymy tre wczeniej omawianego schematu, znalelibymy odwoania do wszystkich elementw z powyszego przykadu.
W kolejnym przykadzie atrybutowi LocationID przypiszemy warto tekstow niezgodn ze schematem:
INSERT INTO TEST (dane) VALUES (
CAST(
'<t:root xmlns:t="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions">
<t:Location LotSize="0.0" SetupHours="0.0" LocationID="tekst" MachineHours="0.0"
LaborHours="0.0">
<t:step>
<t:tool>String</t:tool>
</t:step>
</t:Location>
</t:root>' AS XML))

Prba wykonania tego polecenia zakoczy si nastpujcym komunikatem o bdzie,


informujcym, e warto atrybutu LocationID jest niepoprawna:
XML Validation: Invalid simple type value: 'tekst'. Location: /*:root[1]/
*:Location[1]/@*:LocationID

W kolejnym przykadzie pominiemy definicj wszystkich atrybutw elementu Location.


INSERT INTO TEST (dane) VALUES (
CAST(
'<t:root xmlns:t="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions">
<t:Location>
<t:step>
<t:tool>String</t:tool>
</t:step>
</t:Location>
</t:root>' AS XML))

Przy prbie wykonania tego polecenia dostaniemy nastpujcy komunikat:


XML Validation: Required attribute 'LocationID' is missing. Location: /*:root[1]/
*:Location[1]

Rozdzia 8. XML

173

Zwrmy uwag, e SQL Server 2005 informuje, e brak tylko atrybutu LocationID. Nie
wspomina natomiast nic o pozostaych atrybutach: LotSize, SetupHours, MachineHours,
LaborHours. Wynika to z tego, e atrybuty te nie maj w definicji schematu Production.
ManuInstructionsSchemaCollection parametru use="required".
Jak zauwaylimy w powyszych przykadach, dziki przypisywaniu schematw XML
do kolumn tego typu mamy moliwo automatycznej weryfikacji poprawnoci wstawianych i modyfikowanych danych. Przedstawione w tym rozdziale informacje dotyczce
schematw XML obejmuj tylko cz tej tematyki. Zainteresowanych tematem schematw XML odsyamy na stron http://www.w3.org/XML/Schema.

Metody dostpu
do danych XML i ich obsugi
W SQL Server 2005 dostpnych jest pi metod umoliwiajcych operowanie na danych
typu XML. S to:
exist,
nodes,
query,
value,
modify.

Metody exist, nodes, query, value zalicza si do jzyka XQuery, ktry suy do wyszukiwania informacji w danych typu XML. Przyjrzyjmy si teraz bliej poszczeglnym
metodom.

Metoda exist
Metoda exist pozwala sprawdzi, czy w danych XML istnieje okrelony obiekt. Zwraca
ona warto 1 (True), gdy obiekt znajduje si w danych XML, w przeciwnym razie
zwracana jest warto 0 (False). Posumy si omawianym wczeniej schematem XML
i sprawdmy, czy w tabeli test w kolumnie dane znajduje si element Location z atrybutem LocationID o wartoci 1. Ponisze polecenie T-SQL wykonuje to sprawdzenie:
SELECT * FROM test
WHERE dane.exist('declare namespace t="http://schemas.microsoft.com/sqlserver/
2004/07/adventure-works/ProductModelManuInstructions";
/t:root/t:Location[@LocationID=1]') = 1

Zwrmy uwag na konstrukcj tego polecenia. Metoda exist jest wykonywana na


kolumnie dane, ktr wczeniej zdefiniowalimy jako typu XML. W nawiasie znajduje
si deklaracja przestrzeni nazw t, a nastpnie odwoanie do danych w postaci /rodzic/
potomek[atrybut].

174

SQL Server 2005. Zaawansowane rozwizania biznesowe

Naley take zaznaczy, e w powyszym przykadzie adres URL w deklaracji przestrzeni nazw musi znajdowa si w jednym wierszu. W ksice zosta zamany ze wzgldu na ograniczenia w druku.

Metoda query
Wykorzystujc metod query oraz poprawnie zdefiniowane zapytanie XQuery,
mamy atwy dostp do danych XML. Metoda pobiera fragment danych XML i zwraca je
w postaci tekstowej, a nie XML. W poniszym przykadzie odwoujemy si do bazy
AdventureWorks i tabeli Production.ProductionModel. Pobierane s elementy steps
z danych XML dla wiersza z identyfikatorem 10.
SELECT
ProductModelID,
Instructions.query('declare namespace t="http://schemas.microsoft.com/
sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/t:root/t:Location/t:step') AS Steps
FROM Production.ProductModel
WHERE ProductModelID = 10

Deklarowanie przestrzeni nazw wewntrz zapytania T-SQL wpywa negatywnie na jego


czytelno. Lepszym rozwizaniem jest wykorzystanie polecenia WITH NAMESPACE ().
Powysze zapytanie bdzie wyglda teraz nastpujco:
WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions' AS t)
SELECT ProductModelID, Instructions.query('/t:root/t:Location/t:step') AS Steps
FROM Production.ProductModel
WHERE ProductModelID = 10

Metoda value
Metoda value suy do pobierania konkretnych wartoci elementw lub ich atrybutw
w postaci jednego z podstawowych typw danych, np. int, varchar. Metoda ta przyjmuje dwa argumenty. Pierwszy to poprawnie skonstruowane polecenie XQuery, drugi
za to nazwa podstawowego typu danych, w ktrym maj by zwrcone wyniki. Dozwolone s wszystkie typy danych oprcz XML, image, text, ntext, timestamp oraz typw
zdefiniowanych przez uytkownika.
Wykorzystajmy ponownie tabel Production.ProductModel z bazy AdventureWorks.
Zamy, e chcemy uzyska warto atrybutu LotSize, drugiego elementu Location
dla wiersza z identyfikatorem 10. Zapytanie moe wyglda tak jak poniej (dla czytelnoci i przejrzystoci zapytania ponownie zastosowalimy polecenie WITH NAMESPACE):
WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions' AS t)
SELECT ProductModelID,
Instructions.value('(/t:root/t:Location/@LotSize)[2]',
'decimal (5,2)') AS Location
FROM Production.ProductModel
WHERE ProductModelID = 10

Rozdzia 8. XML

175

W wyniku otrzymujemy jeden wiersz:


ProductModelId
10

Location
1.00

Cay czas pamitajmy, e adres URL w deklaracji przestrzeni nazw musi znajdowa
si w jednym wierszu.
Jeli taka konwersja nie bdzie moliwa, SQL Server 2005 zgosi bd. W poniszym
przykadzie chcemy uzyska warto elementu material i nada jej dziesitny typ danych:
WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions' AS t)
SELECT ProductModelID,
Instructions.value('(/t:root/t:Location/t:step/t:material)[2]',
'decimal (5,2)') AS Location
FROM Production.ProductModel
WHERE ProductModelID = 10

Przy prbie wykonania tego polecenia dostaniemy komunikat o bdzie:


Error converting data type nvarchar to numeric.

Wynika to z faktu, e warto elementu material ma posta tekstow. Zatem w poprawnym zapytaniu zwracanej wartoci moe by przypisany typ danych varchar. Przedstawia to poniszy przykad:
WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions' AS t)
SELECT ProductModelID,
Instructions.value('(/t:root/t:Location/t:step/t:material)[2]',
'varchar(255)') AS Material
FROM Production.ProductModel
WHERE ProductModelID = 10

W wyniku otrzymujemy jeden wiersz:


ProductModelId
10

Material
Acme Polish Cream

Metoda nodes
Metoda nodes umoliwia przeksztacenie danych typu XML w dane o strukturze relacyjnej. Dla kadego wystpienia odpowiednio zdefiniowanego w zapytaniu XQuery
elementu tworzony jest oddzielny wiersz w wynikowej tabeli relacyjnej. Wrmy do
przykadu z tego rozdziau dotyczcego danych XML o megamiksach. W poniszym
przykadzie w pierwszej kolejnoci definiowane s dane w postaci XML. Nastpnie
w zapytaniu T-SQL metoda nodes konwertuje kade wystpienie elementu Track na
posta relacyjn jednego wiersza w tabeli Tab w kolumnie Col. W klauzuli SELECT
posuymy si poznan wczeniej metod value do uzyskania wartoci kadego elementu:

176

SQL Server 2005. Zaawansowane rozwizania biznesowe


DECLARE @mixInfo XML
SET @mixInfo =
CAST('
<Mix>
<Tracks>
<Track id="1">Raven <Track id="2">Track02
<Track id="3">Track03
<Track id="4">Track04
</Tracks>
</Mix>' as XML
)

Intro</Track>
Title02</Track>
Title03</Track>
Title 04</Track>

SELECT Tab.Col.value('.', 'varchar(255)') AS tracklist


FROM @mixInfo.nodes('/Mix/Tracks/Track') as Tab(Col)

Wynikiem zapytania s cztery wiersze:


tracklist
Raven - Intro
Track02 Title02
Track03 Title03
Track04 Title 04

Zwrmy uwag, e gdybymy nie uyli w klauzuli SELECT jednej z XML-owych metod
(exist, query, value) i sprbowali wykona nastpujce zapytanie:
SELECT * FROM @mixInfo.nodes('/Mix/Tracks/Track') as Tab(Col)

to SQL Server zwrciby komunikat o bdzie:


The column 'Col' that was returned from the nodes() method cannot be used directly.
It can only be used with one of the four XML datatype methods exist(), nodes(),
query(), and value() or in IS NULL and IS NOT NULL checks.

Metoda modify
Metoda modify jest rozszerzeniem opracowanym przez firm Microsoft do jzyka XQuery
i nazwanym XML Data Manipulation Language XML DML. Standardowe metody
jzyka XQuery, omwione wczeniej w tym rozdziale, su tylko do pobierania informacji z XML. Metoda modify, jako jedyna, umoliwia modyfikowanie danych XML.
XML DML udostpnia nowe polecenia:
insert,
delete,
replace value of.

Do modyfikowania danych XML bdziemy wykorzystywa standardowe polecenie


UPDATE, w ktrym wykorzystamy metod modify z jednym z powyszych polece.

You might also like