You are on page 1of 57

SQL Server 2005

Autorzy: Thomas Rizzo, Adam Machanic, Robin


Dewson, Rob Walters, Joseph Sack, Julian Skin
Tumaczenie: Daniel Kaczmarek, Daniel Lehun
ISBN: 978-83-246-0555-2
Tytu oryginau: Pro SQL Server 2005 (Pro)
Format: B5, stron: 816

Praktyczny przewodnik po SQL Server 2005


dla programistw i administratorw baz danych
Jakie nowe funkcje oferuje SQL Server 2005?
Jak zintegrowa system bazodanowy z .NET?
Jak wykorzysta moliwoci SQL Server 2005 w otoczeniu biznesowym?
Kada nowa wersja SQL Server zawiera coraz wicej funkcji i udostpnia nowe
moliwoci. Tak te jest w przypadku SQL Server 2005, ktry ma nie tylko ulepszony
system zarzdzania bazami danych, ale rwnie zabezpieczania ich. System ten oferuje
rozszerzenia jzyka T-SQL przydatne zarwno programistom, jak i administratorom,
umoliwia integracj baz z platform .NET, a take posiada znacznie bardziej
rozbudowane funkcje do manipulowania danymi XML. SQL Server 2005 wyposaony
zosta te w wiele innych mechanizmw pozwalajcych zwikszy produktywno
w pracy z bazami danych i zapewni ich lepsze funkcjonowanie.
Ksika SQL Server 2005 to przegld usprawnie najnowszej wersji tego systemu
bazodanowego napisany przez profesjonalistw dla profesjonalistw. Dowiesz si z niej,
jak w praktyce wykorzysta moliwoci SQL Server 2005. Nauczysz si tworzy
rozbudowane raporty przy uyciu Raporting Services, przeprowadza analizy danych za
pomoc Analysis Services, automatyzowa zadania, dodawa do baz danych obiekty
platformy .NET oraz stosowa wygodne funkcje do obsugi danych w formacie XML.

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

Zarzdzanie SQL Server 2005 za pomoc SSMS


Korzystanie z rozszerze jzyka T-SQL
Integrowanie baz danych z .NET
Zastosowania formatu XML w SQL Server 2005
Raportowanie przy uyciu Raporting Services
Analizowanie danych za pomoc Analysis Services
Zabezpieczanie baz danych
Kolejkowanie komunikatw przy uyciu Service Broker
Obsuga powiadomie za pomoc Notification Services
Automatyzowanie zada

O autorach ..................................................................................... 15
O redaktorach technicznych ........................................................... 19
Wprowadzenie ................................................................................ 21
Rozdzia 1. Przegld funkcji i instalacja SQL Servera ......................................... 27
Historia rozwoju SQL Servera ........................................................................................ 27
Przegld funkcji SQL Servera 2005 ................................................................................ 28
Wydania .................................................................................................................... 30
Funkcje ...................................................................................................................... 31
Instalacja .......................................................................................................................... 35
Minimalne wymagania systemowe ........................................................................... 35
Proces instalacji ......................................................................................................... 37
Rejestracja serwera .................................................................................................... 47
Przykadowe bazy danych ......................................................................................... 49
Instalacja dwch rwnolegych instancji .................................................................. 50
Uaktualnianie baz danych SQL Servera 2000 i 7.0 ......................................................... 51
Podsumowanie ................................................................................................................. 51

Rozdzia 2. Technologie zarzdzania SQL Serverem ........................................... 53


czenie si z SQL Serverem i zarzdzanie nim ............................................................ 54
Menu kontekstowe dla kadego typu obiektw ........................................................ 54
Obsuga mobilnych baz danych ................................................................................ 54
Obsuga SQL Servera 2000 ....................................................................................... 56
Nowe funkcje interfejsu uytkownika ............................................................................. 57
Asynchroniczny widok drzewa i filtrowanie obiektw ............................................. 57
Niemodalne okna dialogowe o zmiennym rozmiarze ............................................... 58
Nowe funkcje generowania skryptw i harmonogramw zada .............................. 58
Autoryzacja kodu ...................................................................................................... 60
Panel wynikw .......................................................................................................... 62
Activity Monitor ........................................................................................................ 62
Widoki Summary ...................................................................................................... 63
Rozszerzenia funkcjonalne .............................................................................................. 63
Dedykowane poczenie administracyjne ................................................................. 64
Wizualizacja zakleszcze .......................................................................................... 65
Korelacja monitora Performance Monitor ................................................................ 65
Import i eksport danych dotyczcych zarejestrowanych serwerw .......................... 68
Maintenance Plan Designer ....................................................................................... 68

SQL Server 2005


Zmiany w agencie SQL Server Agent ....................................................................... 69
Database Mail ............................................................................................................ 69
Widoki katalogowe oraz dynamiczne widoki zarzdcze .......................................... 71
Domylny lad serwera ............................................................................................. 73
Rozszerzenia narzdzia Profiler ................................................................................ 74
SQL Configuration Manager ..................................................................................... 75
Surface Area Configurator ........................................................................................ 76
Rozszerzona pomoc oraz integracja ze spoecznoci uytkownikw SQL Servera ... 77
SQLCMD ......................................................................................................................... 78
Server Management Objects ............................................................................................ 80
Podsumowanie ................................................................................................................. 84

Rozdzia 3. Rozszerzenia T-SQL dla programistw .............................................. 85


Rozszerzenia majce wpyw na DML ............................................................................. 86
Uniewanienie przestarzaego stylu zcze zewntrznych ...................................... 87
Wsplne wyraenia tabelowe .................................................................................... 88
Operator TOP ............................................................................................................ 97
Rozszerzenia klauzuli FROM ................................................................................. 101
OUTPUT ................................................................................................................. 111
Funkcje rankingowe ................................................................................................ 112
EXCEPT i INTERSECT ......................................................................................... 119
Synonimy ................................................................................................................ 122
Oglne programowanie ................................................................................................. 123
Obsuga bdw ....................................................................................................... 124
Rozszerzenie .WRITE instrukcji UPDATE ............................................................ 132
EXECUTE ............................................................................................................... 134
Kontekst zabezpiecze kodu ................................................................................... 134
Deklaracje .NET ...................................................................................................... 138
Podsumowanie ............................................................................................................... 139

Rozdzia 4. Rozszerzenia T-SQL dla administratorw baz danych ...................... 141


Widoki metadanych ....................................................................................................... 141
Widoki zgodnoci .................................................................................................... 142
Widoki katalogowe ................................................................................................. 143
Dynamiczne widoki i funkcje zarzdcze ................................................................. 145
Procedury wyzwalane DDL ........................................................................................... 146
Tworzenie i zmienianie procedur wyzwalanych DDL ............................................ 147
Usuwanie procedur wyzwalanych DDL ................................................................. 149
Udostpnianie i blokowanie procedur wyzwalanych DDL ..................................... 149
Odczytywanie procedur wyzwalanych DDL w widokach katalogowych .............. 149
Programowanie procedur wyzwalanych DDL przy uyciu funkcji eventdata() ..... 150
Rozszerzenia w zakresie indeksowania i wydajnoci .................................................... 152
Indeksowanie online ................................................................................................ 153
Kontrola blokowania w trakcie tworzenia indeksw .............................................. 154
Tworzenie indeksw z doczonymi dodatkowymi kolumnami ............................. 155
Modyfikowanie indeksw ....................................................................................... 156
Uywanie statystyk dla skorelowanych kolumn DATETIME ................................ 160
Zwikszanie wydajnoci sortowania dla trzeciorzdnych ustawie sortowania ..... 161
Partycjonowanie tabel i indeksw ................................................................................. 163
Funkcje partycjonowania ........................................................................................ 164
Schematy partycjonowania ..................................................................................... 165
Tworzenie partycjonowanych tabel i indeksw ...................................................... 165
Dodawanie i usuwanie partycji ............................................................................... 166
Modyfikowanie funkcji i schematw partycjonowania .......................................... 168

Spis treci

7
Doczanie i usuwanie tabel z partycji .................................................................... 169
Zarzdzanie partycjami tabel i indeksw ................................................................ 170
Rozszerzenia tabel i widokw ....................................................................................... 171
Rozszerzenia w widokach indeksowanych ............................................................. 171
Stae kolumny obliczane ......................................................................................... 172
Migawki ......................................................................................................................... 173
Poziom izolacji transakcji SNAPSHOT .................................................................. 173
Migawki baz danych ............................................................................................... 178
Rozszerzenia w zakresie integralnoci danych .............................................................. 180
Weryfikacja stron bazy danych ............................................................................... 180
Przeczanie bazy danych w tryb awaryjny ............................................................ 181
Podsumowanie ............................................................................................................... 182

Rozdzia 5. Integracja z .NET .......................................................................... 183


Podstawowe informacje na temat integracji SQL Servera i .NET ................................ 184
Dlaczego SQL Server 2005 obsuguje CLR? .......................................................... 184
Kiedy powinno si uywa procedur CLR? ............................................................ 185
Kiedy nie powinno si uywa procedur CLR? ...................................................... 186
Sposb, w jaki SQL Server obsuguje .NET architektura rozwizania ............. 186
Model programistyczny .NET w SQL Serverze ............................................................ 187
Modyfikacje ADO.NET zwizane z obsug SQL Servera .................................... 188
Przegld nowych przestrzeni nazw .NET dla SQL Servera .................................... 188
Implementacja procedury skadowanej ......................................................................... 189
Tworzenie projektu SQL Servera Project w Visual Studio 2005 ............................ 190
Budowa procedury skadowanej ............................................................................. 194
Dodawanie parametrw ........................................................................................... 195
Definicja problemu .................................................................................................. 196
Uycie obiektu SqlPipe ........................................................................................... 198
Kompletne rozwizanie implementacja ciaa procedury skadowanej ............... 201
Testowanie procedury skadowanej ........................................................................ 203
Debugowanie procedury ......................................................................................... 205
Zgaszanie wyjtkw w procedurach CLR ............................................................. 206
Wdraanie procedur CLR .............................................................................................. 210
Podsumowanie ............................................................................................................... 212

Rozdzia 6. Programowanie podzespow ........................................................ 213


Typy CLR zdefiniowane przez uytkownika ................................................................ 214
Zastosowania typw definiowanych przez uytkownika ........................................ 215
Dodawanie typu zdefiniowanego przez uytkownika do projektu SQL Servera .... 215
Elementy typu zdefiniowanego przez uytkownika ................................................ 217
Prosty przykad: typ PhoneNumber ........................................................................ 221
Kolejny przykad: typ StringArray .......................................................................... 229
Zarzdzanie typami zdefiniowanymi przez uytkownika ....................................... 238
Funkcje CLR zdefiniowane przez uytkownika ............................................................ 238
Dodawanie funkcji zdefiniowanej przez uytkownika do projektu Visual Studio . 239
Szablon funkcji zdefiniowanej przez uytkownika w Visual Studio 2005 ............. 240
Atrybut SqlFunction ................................................................................................ 241
Skalarne funkcje zdefiniowane przez uytkownika ................................................ 242
Definiowanie funkcji tabelowych zdefiniowanych przez uytkownika .................. 245
Zarzdzanie funkcjami CLR zdefiniowanymi przez uytkownika ......................... 250
Agregaty CLR zdefiniowane przez uytkownika .......................................................... 251
Dodawanie agregatu definiowanego przez uytkownika
do projektu SQL Servera ...................................................................................... 252
Elementy agregatu zdefiniowanego przez uytkownika ......................................... 253

SQL Server 2005


Procedury wyzwalane CLR zdefiniowane przez uytkownika ..................................... 260
Dodawanie procedury wyzwalanej CLR zdefiniowanej przez uytkownika
do projektu SQL Servera ...................................................................................... 261
Implementowanie procedur wyzwalanych CLR ..................................................... 261
Zarzdzanie procedurami wyzwalanymi zdefiniowanymi przez uytkownika ...... 265
Zarzdzanie podzespoami ............................................................................................ 266
Uwaga dotyczca Visual Studio 2005 ........................................................................... 266
Podsumowanie ............................................................................................................... 267

Rozdzia 7. SQL Server i XML ......................................................................... 269


Czym jest XML? ........................................................................................................... 269
Czym s XPath i XMLDOM? ....................................................................................... 271
Skadnia XPath ........................................................................................................ 272
Funkcje XPath ......................................................................................................... 274
XMLDOM XML Document Object Model ....................................................... 274
Klasy XPathDocument, XPathNavigator oraz XPathExpression ........................... 276
Wstawianie danych XML do bazy danych .................................................................... 277
Czym jest SQLXML? .............................................................................................. 278
Konfiguracja SQL Servera ...................................................................................... 279
OPENXML .............................................................................................................. 279
SQLXML widoki XML uywajce adnotowanych schematw XML .............. 286
Diagramy uaktualniajce SQLXML ....................................................................... 291
Zbiorcze adowanie danych XML ........................................................................... 294
Odczytywanie danych XML z bazy danych klauzula FOR XML ............................ 298
Klauzula FOR XML po stronie serwera ................................................................. 298
Klauzula FOR XML po stronie klienta ................................................................... 304
Uywanie szablonw ............................................................................................... 304
Rozszerzenia klauzuli FOR XML ................................................................................. 305
Programowanie SQLXML w .NET i COM ................................................................... 306
SqlXmlCommand .................................................................................................... 307
SqlXmlParameter .................................................................................................... 307
SqlXmlAdapter ........................................................................................................ 307
SqlXmlException .................................................................................................... 308
Przykadowe kody ................................................................................................... 309
Klauzula FOR XML przetwarzanie po stronie serwera i po stronie klienta ...... 310
Sposb uycia obiektu XMLTextReader ................................................................ 311
Uywanie parametrw w SQLXML ....................................................................... 312
Wykonywanie zapyta XPath lub zapyta SQL z szablonami ............................... 313
Interakcja z zestawem danych ADO.NET .............................................................. 313
Programowanie diagramw uaktualniajcych ........................................................ 314
Podsumowanie ............................................................................................................... 314

Rozdzia 8. Obsuga XML-a i XQuery w SQL Serverze 2005 .............................. 315


Sposb uycia typu danych XML ................................................................................. 316
Sposb przechowywania danych XML w SQL Serverze ....................................... 318
Tworzenie kolumn XML ......................................................................................... 320
Ustawianie uprawnie do tworzenia schematw .................................................... 325
Nakadanie ogranicze na kolumny XML .............................................................. 326
Ograniczenia typu danych XML ............................................................................. 327
Wstawianie danych w kolumnach XML ....................................................................... 328
Uycie SSIS wzgldem danych XML ..................................................................... 328
Zbiorcze adowanie danych XML ........................................................................... 330
Tworzenie wasnego zapytania lub aplikacji .......................................................... 330

Spis treci

9
Zapytania na danych XML ............................................................................................ 331
Podstawy jzyka XQuery ........................................................................................ 332
Podstawowe metody zapyta XML ........................................................................ 338
Zapytania midzydomenowe ................................................................................... 340
Modyfikowanie danych XML ....................................................................................... 341
Ograniczenia zakresu modyfikacji danych XML .................................................... 342
Indeksowanie danych XML w celu zwikszenia wydajnoci ....................................... 343
Sposb dziaania indeksw na danych XML .......................................................... 344
Drugorzdne indeksy XML ..................................................................................... 345
Przeszukiwanie penotekstowe a typ danych XML ....................................................... 346
Dynamiczne widoki zarzdcze i dane XML .................................................................. 347
Aplikacje i dane XML ................................................................................................... 348
Obsuga usug sieciowych XML ................................................................................... 349
Tworzenie wza kocowego .................................................................................. 350
Uywanie zaawansowanych usug sieciowych ....................................................... 356
Monitorowanie wydajnoci usug sieciowych XML .............................................. 361
Podsumowanie ............................................................................................................... 362

Rozdzia 9. SQL Server 2005 Reporting Services ............................................ 363


Komponenty Reporting Services ................................................................................... 364
Report Server ........................................................................................................... 365
Katalog metadanych ................................................................................................ 366
Report Designer ....................................................................................................... 366
Aplikacja WWW Report Manager .......................................................................... 368
Bezpieczestwo Reporting Services ....................................................................... 370
Tworzenie prostego raportu w SSRS 2000 .................................................................... 370
Uruchamianie projektanta ....................................................................................... 371
Praca ze rdami danych i zestawami danych ....................................................... 371
Definiowanie ukadu i podgldanie raportu ............................................................ 372
Praca z wyraeniami ................................................................................................ 373
Wdraanie raportu ................................................................................................... 373
Uaktualnianie SQL Server 2000 Reporting Services .................................................... 373
Zmiany w licencjonowaniu Reporting Services ............................................................ 375
Zintegrowane SQL Server Management Studio ............................................................ 376
Przewodnik Management Studio i Reporting Services ...................................... 377
Zmiany w sposobie zarzdzania .................................................................................... 382
Dostawca WMI ....................................................................................................... 383
Sieciowe usugi zarzdzania i wykonawcze ............................................................ 386
Narzdzie konfiguracji Reporting Services ................................................................... 386
Usprawnienia w zakresie projektowania i wykonywania raportw .............................. 387
Edytor wyrae Expression Editor .......................................................................... 388
Parametry wielowartociowe .................................................................................. 388
Kontrolka wyboru daty ............................................................................................ 391
Sortowanie interaktywne ......................................................................................... 392
Integracja z Analysis Services ................................................................................. 393
Przewodnik tworzenie raportu w BIDS ............................................................. 394
Nagwki pywajce ................................................................................................ 402
Zmiany rde danych: wyraenia, usugi sieciowe i XML, SSIS i SAP ............... 403
Wasne elementy raportw ...................................................................................... 409
Integracja z Visual Studio i kontrolki ReportViewer .................................................... 409
Korzystanie z kontrolek WinForm .......................................................................... 410
Oprogramowywanie kontrolek ReportViewer ........................................................ 413
Obiekty LocalReport oraz ServerReport ................................................................. 417

10

SQL Server 2005


Integracja z SharePoint .................................................................................................. 417
Zapytania i raporty ad hoc uytkownika ....................................................................... 418
Klient ReportBuilder ............................................................................................... 419
Semantic Model Definition Language .................................................................... 420
Przewodnik ReportBuilder ................................................................................. 422
Podsumowanie ............................................................................................................... 428

Rozdzia 10. Analysis Services ......................................................................... 429


Rozszerzenia SSAS 2005 .............................................................................................. 430
Architektura ............................................................................................................. 430
Wydajno, skalowalno, dostpno .................................................................... 432
Uyteczno ............................................................................................................ 432
Projektowanie .......................................................................................................... 433
Instalacja ........................................................................................................................ 435
Na czym polega analiza? ............................................................................................... 436
OLAP, OLTP i hurtownie danych ........................................................................... 436
Terminologia wykorzystywana w systemach OLAP .................................................... 437
Kostki ...................................................................................................................... 438
Komrki .................................................................................................................. 438
Miary i tabele faktw .............................................................................................. 438
Wymiary i atrybuty ................................................................................................. 439
Hierarchie ................................................................................................................ 439
Projekty Analysis Services ............................................................................................ 440
Definiowanie rde danych .................................................................................... 442
Projektanty a kreatory ............................................................................................. 445
Definiowanie widokw rde danych .................................................................... 446
Definiowanie kostek ................................................................................................ 450
Wdraanie projektw oraz konfigurowanie projektw do wdroenia .................... 454
Operacje na kostkach .............................................................................................. 456
Przegldanie kostek ................................................................................................. 457
Przegldanie kostek z hierarchiami ......................................................................... 459
Zarzdzanie wywietlanymi danymi ....................................................................... 462
Obliczenia i MDX ................................................................................................... 465
Kluczowe wskaniki wydajnoci (KPI) .................................................................. 468
Analysis Services Scripting Language (ASSL) ............................................................. 472
Przykadowy obiekt ASSL widok rda danych z zapytaniem nazwanym ...... 473
Analizowanie kodu ASSL ....................................................................................... 475
Podsumowanie ............................................................................................................... 476

Rozdzia 11. Bezpieczestwo ........................................................................... 477


Dwa zdania o uytkowniku sa ....................................................................................... 478
Surface Area Configuration ........................................................................................... 478
Poczenia zdalne .................................................................................................... 478
Dedykowane poczenie administracyjne ............................................................... 479
.NET Framework ..................................................................................................... 479
Database Mail .......................................................................................................... 480
SQLMail .................................................................................................................. 480
Service Broker ......................................................................................................... 481
Poczenia HTTP ..................................................................................................... 481
Tworzenie lustrzanej kopii baz danych ................................................................... 481
Web Assistant .......................................................................................................... 481
xp_cmdshell ............................................................................................................ 482
Zdalne zapytania ad hoc .......................................................................................... 482
Rozszerzone procedury skadowane automatyzacji OLE ....................................... 482
Rozszerzone procedury skadowane SMO i DMO ................................................. 482

Spis treci

11
Obiekty zabezpieczajce i obiekty zabezpieczane ........................................................ 483
Obiekty zabezpieczajce ......................................................................................... 483
Obiekty zabezpieczane ............................................................................................ 493
Uprawnienia ................................................................................................................... 496
Typy uprawnie ....................................................................................................... 496
Zarzdzanie uprawnieniami .................................................................................... 498
Code Access Security .................................................................................................... 502
Imperatywna i deklaratywna implementacja CAS .................................................. 502
Uycie CAS z SQL Serverem ................................................................................. 503
Szyfrowanie ................................................................................................................... 507
Hierarchia szyfrowania w SQL Serverze 2005 ....................................................... 508
Szyfrowanie hasem podanym przez uytkownika ................................................. 509
Szyfrowanie kluczem symetrycznym ...................................................................... 510
Szyfrowanie kluczem asymetrycznym .................................................................... 511
Szyfrowanie certyfikatem ....................................................................................... 512
Certyfikaty i usugi sieciowe ......................................................................................... 513
Podsumowanie ............................................................................................................... 516

Rozdzia 12. Service Broker ............................................................................. 517


Czym jest Service Broker? ............................................................................................ 518
Architektura technologii Service Broker ................................................................. 518
Scenariusze uycia narzdzia Service Broker ......................................................... 522
Tworzenie aplikacji Service Broker .............................................................................. 523
Udostpnianie narzdzia Service Broker ................................................................ 524
Tworzenie typw komunikatw .............................................................................. 524
Tworzenie kontraktw ............................................................................................. 524
Tworzenie kolejek ................................................................................................... 525
Tworzenie usug ...................................................................................................... 526
Tworzenie procedur skadowanych aplikacji Service Broker ................................. 526
Przykadowa aplikacja Service Broker ................................................................... 530
Wyznaczanie tras i bezpieczestwo w technologii Service Broker .............................. 537
Tworzenie rozproszonych aplikacji Service Broker ............................................... 537
Przykadowa rozproszona aplikacja Service Broker ............................................... 541
Podsumowanie ............................................................................................................... 562

Rozdzia 13. Automatyzacja i monitorowanie .................................................... 563


SQL Server Agent ......................................................................................................... 564
Krok 1. czenie si z SQL Serverem .................................................................... 565
Krok 2. Tworzenie zadania agenta .......................................................................... 567
Rozszerzenia bezpieczestwa ................................................................................. 571
Podsystemy agenta .................................................................................................. 580
Wspuytkowanie harmonogramw zada ........................................................... 581
Zapisywanie do tabeli sysjobstepslogs .................................................................... 584
Zdarzenia WMI oraz alerty agenta .......................................................................... 585
Liczniki wydajnoci agenta ..................................................................................... 587
Uaktualnianie agenta ............................................................................................... 588
Plany utrzymania ........................................................................................................... 590
Tworzenie planu utrzymania ................................................................................... 591
Okno narzdziowe ................................................................................................... 592
Okno dokumentu narzdzia Maintenance Plan Designer ....................................... 592
SQLCMD ....................................................................................................................... 598
czenie si z SQL Serverem ................................................................................. 599
Przekazywanie zmiennych ...................................................................................... 600
Uywanie dedykowanego poczenia administracyjnego ....................................... 601
Tworzenie skryptw ................................................................................................ 601

12

SQL Server 2005


Database mail ................................................................................................................ 602
Informacje oglne ................................................................................................... 603
Konfigurowanie Database Mail .............................................................................. 605
Wysyanie poczty .................................................................................................... 609
SQL Profiler .................................................................................................................. 610
Korelacja Performance Monitora ............................................................................ 614
ShowPlan ................................................................................................................. 616
Wizualizacja zakleszcze ........................................................................................ 617
Podsumowanie ............................................................................................................... 618

Rozdzia 14. Integration Services ..................................................................... 621


Nowe funkcje w SSIS .................................................................................................... 623
Nowe rodowisko IDE w SSIS ...................................................................................... 624
czenie si z SSIS w Management Studio ............................................................ 625
Tworzenie nowego projektu SSIS w BIDS ............................................................. 626
Podstawy dziaania SSIS ............................................................................................... 627
Obszar projektowania przepywu sterowania ......................................................... 627
Obszar projektowania przepywu danych ............................................................... 629
Obszar projektowania procedur obsugi zdarze .................................................... 643
Przegldarka pakietw Package Explorer ............................................................... 645
Menedery pocze ................................................................................................ 645
Przegldarka rozwiza Solution Explorer ............................................................. 646
Okno waciwoci Properties .................................................................................. 647
Zadania okna narzdziowego Control Flow .................................................................. 648
Kontenery ................................................................................................................ 649
Zadania Analysis Services ...................................................................................... 653
Zadanie Data Flow .................................................................................................. 653
Zadania Execute Package ........................................................................................ 654
Zadanie Bulk Insert ................................................................................................. 654
Zadanie Execute SQL .............................................................................................. 654
Zadanie Execute Process ......................................................................................... 656
Zadanie File System ................................................................................................ 656
Zadanie File Transfer Protocol ................................................................................ 656
Zadania Maintenance Plan ...................................................................................... 657
Zadanie Message Queue .......................................................................................... 657
Zadanie Send Mail .................................................................................................. 658
Zadania Scripting .................................................................................................... 658
Zadanie Web Service .............................................................................................. 661
Zadania WMI .......................................................................................................... 662
Zadanie XML .......................................................................................................... 662
Zadania projektanta przepywu danych Data Flow Designer ........................................ 662
Adaptery rde ....................................................................................................... 662
Adaptery obiektw docelowych .............................................................................. 663
Transformacje .......................................................................................................... 664
Zapisywanie zdarze w dziennikach ............................................................................. 670
Konfiguracje .................................................................................................................. 674
Sposb uycia narzdzia Package Configuration Organizer ................................... 675
Zmienne ......................................................................................................................... 678
Ograniczenia pierwszestwa przepywu prac ................................................................ 681
Punkty kontrolne ............................................................................................................ 682
Transakcje ...................................................................................................................... 683
Debugowanie ................................................................................................................. 684
Wizualne debugowanie przepywu sterowania ....................................................... 684
Wizualne debugowanie przepywu danych ............................................................. 685

Spis treci

13
Przegldarki danych ................................................................................................ 685
Okno punktw przerwa ......................................................................................... 686
Inne okna debugowania ........................................................................................... 687
Narzdzie SSIS Package Deployment Utility ............................................................... 687
Wykonywanie migracji pakietw SQL Servera 2000 ................................................... 688
Tworzenie harmonogramw pakietu SSIS .................................................................... 688
Podsumowanie ............................................................................................................... 689

Rozdzia 15. Tworzenie lustrzanych kopii baz danych ........................................ 691


Definicja wysokiej dostpnoci ..................................................................................... 693
Oglne informacje na temat sporzdzania lustrzanych kopii baz danych ..................... 694
Mechanizm tworzenia kopii lustrzanych a inne rozwizania ........................................ 697
Konfiguracja mechanizmu tworzenia lustrzanych kopii baz danych ............................ 698
Wymagania wstpne, poczenia i bezpieczestwo ................................................ 699
Tworzenie kopii bezpieczestwa i odtwarzanie gwnej bazy danych ................... 703
Ustanawianie partnerstwa serwera gwnego i serwera lustrzanego ...................... 704
Zmiana poziomw zabezpiecze transakcji ............................................................ 705
Stany sporzdzania kopii lustrzanych, sygnay taktujce i kworum ....................... 706
Inicjowanie przywracania dziaania ........................................................................ 707
Zawieszanie i przywracanie dziaania
mechanizmu sporzdzania lustrzanych kopii baz danych .................................... 708
Wyczanie mechanizmu tworzenia lustrzanych kopii baz danych ........................ 709
Indeksowanie penotekstowe a sporzdzanie lustrzanych kopii baz danych .......... 709
Service Broker a sporzdzanie lustrzanych kopii baz danych ................................ 710
Konfigurowanie mechanizmu tworzenia lustrzanych kopii baz danych
w Management Studio .......................................................................................... 710
Aplikacje klienckie i sporzdzanie kopii lustrzanych ................................................... 715
Monitorowanie procesu sporzdzania kopii lustrzanych ............................................... 717
Widoki katalogowe ................................................................................................. 717
Liczniki Performance Monitora .............................................................................. 721
Profiler ..................................................................................................................... 721
Dziennik zdarze systemu Windows oraz dziennik bdw SQL Servera ............. 722
Wydajno a sporzdzanie lustrzanych kopii baz danych ............................................. 723
Ograniczenia mechanizmu sporzdzania kopii lustrzanych .......................................... 724
Przykadowa aplikacja ................................................................................................... 725
Migawki baz danych a mechanizm sporzdzania kopii lustrzanych ............................. 731
Oglne informacje na temat migawek baz danych ................................................. 732
Korzystanie z migawek w kodzie T-SQL ............................................................... 734
Wydajno systemu z migawkami na serwerach lustrzanych ................................. 735
Uywanie i monitorowanie migawek baz danych oraz zarzdzanie nimi ............... 736
Programowanie z uyciem migawek baz danych ................................................... 737
Ograniczenia migawek baz danych ......................................................................... 737
Klastry Windows w SQL Serverze 2005 ....................................................................... 738
Replikacja w SQL Serverze 2005 .................................................................................. 739
Podsumowanie ............................................................................................................... 740

Rozdzia 16. Notification Services .................................................................... 741


Architektura Notification Services ................................................................................ 742
Subskrybenci ........................................................................................................... 743
Subskrypcje ............................................................................................................. 744
Zdarzenia ................................................................................................................. 744
Powiadomienia ........................................................................................................ 745
Tworzenie aplikacji Notification Services .................................................................... 746
Definiowanie instancji NS plik konfiguracji instancji ....................................... 746
Definiowanie aplikacji NS plik definicji aplikacji ............................................. 751

14

SQL Server 2005


Kompilowanie i uruchamianie aplikacji NS .................................................................. 771
Monitorowanie aplikacji NS i usuwanie z niej bdw ................................................. 775
Korzystanie z NS w kodzie rdowym ........................................................................ 777
Programowanie NS w Visual Studio ....................................................................... 777
Zarzdzanie NS w kodzie rdowym .................................................................... 782
Podsumowanie ............................................................................................................... 782

Skorowidz .................................................................................... 783

Rozdzia 7.

Popularno jzyka XML wzrasta z kadym dniem. Niektrzy zdeklarowani zwolennicy koncepcji relacyjnej krc z dezaprobat gowami, gdy sysz o XML-u. Jednak
tak naprawd XML stanowi uzupenienie technologii relacyjnych, a dane XML s
w wikszoci ustrukturyzowane jak dane relacyjne. Czy to dobrze? Pewnie nie, poniewa obydwa modele sprawdzaj si najlepiej w przypadku danych, dla ktrych
zostay stworzone: XML dla danych na wp ustrukturyzowanych, a relacyjne bazy
danych dla danych relacyjnych. Ponadto semantyka mechanizmw przechowywania,
odpytywania i modyfikowania danych XML czsto sprawia kopot osobom preferujcym podejcie relacyjne. Jak si przekonamy, XQuery w niczym nie przypomina
jzyka T-SQL, jednak obydwu technologii mona uywa cznie, aby rozwizywa
problemy biznesowe. Zanim zagbimy si w nowe mechanizmy obsugi XML-a
dostpne w SQL Serverze 2005, musimy jednak najpierw zrozumie, czym jest XML
i w jaki sposb SQL Server ju obsuguje technologi XML.
Na pocztku niniejszego rozdziau zajmiemy si rzeczami podstawowymi: czym jest
XML i w jaki sposb aktualna wersja SQL Servera obsuguje XML za pomoc FOR XML,
rozdrabniania danych XML i wsparcia FOR XML z poziomu .NET Framework. Opisane
zostanie rwnie XPath oraz zakres obsugi XPath wiadczonej przez SQL Server. Na
koniec przyjrzymy si SQLXML oraz pokaemy sposb, w jaki mona uy tej technologii do rozszerzenia zakresu obsugi XML-a przez SQL Server. Jeli uytkownik
nie posiada SQLXML, wersj 3.0 dla SQL Servera 2000 mona pobra za darmo
z sieci WWW, natomiast wersja 4.0 jest doczona do SQL Servera 2005. W nastpnym rozdziale zobaczymy, w jaki sposb SQL Server zacz obsugiwa klauzul FOR
XML z nowym typem danych XML oraz jzykiem XQuery. Zajmiemy si take obsug
usug sieciowych WWW, ktra zastpia obsug usug sieciowych ISAPI SQLXML.

Czym jest XML?


Informacja dla tych, ktrzy przez ostatnich dziesi lat yli odizolowani od wiata
zewntrznego i nigdy nie zetknli si z szumem towarzyszcym jzykowi XML: ot
XML to skrt od eXtensible Markup Language. XML pozwala na strukturyzowanie

270

SQL Server 2005

danych przy uyciu standaryzowanych schematw. Standaryzacja jest wanie najwaniejsz cech, poniewa z niej wypywa sia XML-a. Kady inny system potrafi
odczytywa i zapisywa dane zgodne ze standardem, oczywicie uwzgldniajc fakt,
e niektre systemy mog czasami odmiennie interpretowa dane. XML rwnie pozwala
na pozyskiwanie danych XML przy uyciu standardu XPath i przeksztacanie danych
XML z zastosowaniem XSLT. Obydwa standardy zostan opisane w dalszej czci tego
rozdziau.
Ciekaw kwesti jest dokonanie wyboru midzy danymi XML i danymi relacyjnymi.
Co jaki czas na nowo rozpoczyna si dyskusja na temat przechowywania danych
w klasycznym standardzie relacyjnym, w hybrydowym modelu XML/relacyjnym oraz
w czystym formacie XML. Naszym zdaniem najlepiej jest wybiera rozwizanie, ktre
najbardziej przydaje si do rozwizania danego problemu. Uytkownicy specjalizujcy
si w technologiach relacyjnych, ktrzy potrafi zapewni wysok wydajno przetwarzania danych relacyjnych, nie maj powodw, by przestawi si na uywanie
rozwiza XML-owych. Dane relacyjne mona bez trudu udostpnia dla wiata zewntrznego w postaci XML przy uyciu FOR XML, natomiast wewntrznie dane mog
nadal by przechowywane w modelu relacyjnym. Niewarto ulega zachwytom nad
XML-em bez wyranego powodu. Na przykad dane XML maj charakter tekstowy,
a wic ich rozmiar jest wikszy ni rozmiar binarnych odpowiednikw. XML jest
rwnie rozwleky, poniewa nie jest znormalizowany jak dane relacyjne, a przez to
w jednym dokumencie mog si powtarza sekcje tych samych danych. Ponadto model
programistyczny XML-a rni si od modelu programistycznego, do ktrego przyzwyczaili si programici przetwarzajcy dane relacyjne.
Poznajmy najpierw podstawow terminologi XML, a potem zaczniemy poznawa
coraz gbsze tajemnice technologii, aby mc j jak najlepiej zrozumie. Czsto mona usysze ludzi rozprawiajcych o dokumentach, elementach i atrybutach. Najlepiej
jest przyj podejcie, wedug ktrego caa struktura XML-a to dokument, dokument
zawiera elementy, a elementy mog zawiera atrybuty. Poniszy przykadowy dokument XML zawiera jeden dokument, trzy elementy i dwa atrybuty:
<?xml version="1.0"?>
<customer>
<name id="10">Tom Rizzo</name>
<state region="Northwest">WA</state>
</customer>

XML posiada schematy i przestrzenie nazw. Nie istnieje wymg, by nakada schematy na XML, lecz dziki schematom i przestrzeniom nazw mona w unikatowy sposb
definiowa poprawne i niepoprawne struktury danych w dokumencie XML. W wiecie relacyjnym mamy do czynienia ze strukturami tabel oraz ograniczeniami. Niektre
rozwizania relacyjne mona odwzorowywa na schematy XML, poniewa schematy
XML posiadaj typy danych oraz reguy wyznaczajce kolejno, moc i inne aspekty
dokumenty XML. Dziki schematom mona wspuytkowa wasne dane XML z innymi uytkownikami i zapewni, e inni uytkownicy nadal bd rozumie te dane.
Przestrze nazw XML to kolekcja nazw identyfikowana przez odwoanie URI uywane w dokumencie XML przez typy elementw oraz nazwy atrybutw. Dziki przestrzeniom nazw mona uywa tych samych nazw pochodzcych z rnych rde
i unika konfliktw midzy nimi. Na przykad mona uy tego samego elementu

Rozdzia 7. SQL Server i XML

271

o nazwie customer pochodzcego z dwch rnych rde, jeli tylko podana zostanie
przestrze nazw identyfikujca elementy jako nalece do odmiennych przestrzeni
nazw. Schematy i przestrzenie nazw bd szczeglnie wane, gdy bdziemy poznawa
nowy typ danych XML dostpny w SQL Serverze 2005 oraz omawia natywny sposb
przechowywania danych XML w bazie danych.

Czym s XPath i XMLDOM?


Gdy ma si do dyspozycji zbir dokumentw XML, bez wtpienia istotn rzecz jest
moliwo wykonywania na tych zbiorach zapyta i odczytywania potrzebnych informacji. XML Path Language (XPath) to jzyk zapyta umoliwiajcy definiowanie
czci dokumentu XML, ktre naley wybra. XPath posiada parser, ktry interpretuje
skadni, odczytuje dokument XML i wyciga z niego odpowiednie czci. Na przykad z dokumentu XML mona odczytywa wszystkich klientw mieszkajcych w stanie
Nowy Jork. W tym celu wystarczy napisa odpowiedni instrukcj XPath.
Jzyk XML jest hierarchiczny, dziki czemu w XPath mona wskazywa ciek lub
cieki do danych XML, ktre trzeba pozyska. Dane XML mona traktowa jak hierarchi wzw. Wzem gwnym jest zazwyczaj element dokumentu XML. Nastpnie pod wzem gwnym tworzona jest struktura drzewiasta dla wszystkich danych
XML. Gdyby przykadowy kod XML przedstawiony wczeniej odwzorowa na hierarchi cieek XML, uzyskalibymy drzewo widoczne na rysunku 7.1.

Rysunek 7.1. Przykadowe drzewo dokumentu XML

Drzewo nie jest szczeglnie imponujce, ale bez wtpienia jest to drzewo. Wida w nim
wszystkie elementy, atrybuty i wzy tekstowe. Przy uyciu XPath mona odczytywa
siedem typw wzw: wze gwny, element, atrybut, przestrze nazw, instrukcj
przetwarzania, komentarz i wze tekstowy. W instrukcjach XPath uywa si najczciej elementw, atrybutw, instrukcji przetwarzania oraz wzw tekstowych.

272

SQL Server 2005

XPath wykorzystuje si najczciej do nawigowania wrd rnych wzw za pomoc osi XPath (ang. XPath axis). Osie XPath opisuj sposb nawigacji w strukturze
przez wskazanie punktu pocztkowego oraz kierunku nawigacji. W XPath wystpuje
13 osi, lecz najczciej uywa si osi child (potomkw) i attribute (atrybutw). W tabeli 7.1
opisano wszystkie 13 dostpnych osi.
Tabela 7.1. Osie XPath
Nazwa

Opis

Ancestor

Zawiera wze rodzica wza kontekstu oraz wszystkie nastpne wzy


rodzicw tego wza a do wza gwnego.

Ancestor-or-self

Zawiera wzy przodkw oraz sam wze kontekstu a do wza gwnego.

Attribute

Zawiera atrybuty wza kontekstu, jeli wze kontekstu jest wzem elementu.

Child

Zawiera wzy potomkw wza kontekstu.

Descendant

Zawiera wzy potomka, kolejnych potomkw i tak dalej wza kontekstu.

Descendent-or-self

Zawiera sam wze kontekstu oraz wzy wszystkich potomkw wza


kontekstu.

Following

Zawiera wszystkie wzy w tym samym dokumencie co wze kontekstu,


ktre pod wzgldem kolejnoci w dokumencie wystpuj po wle kontekstu.
Nie zawiera jednak adnych wzw potomkw, przestrzeni nazw ani atrybutw.

Following-sibling

To samo co o Following, lecz zawiera wszystkie wzy, ktrych rodzicem


jest ten sam wze co w przypadku wza kontekstu.

Namespace

Zawiera wzy przestrzeni nazw wza kontekstu, o ile wze kontekstu jest
elementem.

Parent

Zawiera wze rodzica wza kontekstu. Wze gwny nie posiada rodzica.
O jest przeciwiestwem osi potomkw.

Preceding

To samo co o Following, lecz zamiast wzw po wle kontekstu bdzie


zawiera wzy wystpujce przed wzem kontekstu biorc pod uwag
kolejno w dokumencie.

Preceding-sibling

To samo co o Preceding, lecz zawiera wszystkie wzy majce tego samego


rodzica co wze kontekstu.

Self

Zawiera wycznie wze kontekstu.

Skadnia XPath
Do wyboru wzw podlegajcych przetwarzaniu XPath uywa zestawu wyrae.
Najczciej spotykanym wyraeniem jest lokalizacja cieki. Wyraenie to zwraca zestaw wzw (ang. node set). XPath pozwala na uywanie skadni penej oraz skadni
skrconej. Pena skadnia lokalizacji cieki ma nastpujc posta:
/nazwaOsi::wzeTest[predykat]/nazwaOsi::wzeTest[predykat]

W przykadzie wystpuje znak ukonika, ktry odwouje si do wza gwnego jako


do wza kontekstu. Nastpnie wskazywana jest o oraz wzeTest, a take opcjonalny
predykat. Dalej mona umieszcza jedn lub wicej analogicznych struktur, by ostatecznie uzyska wzy, ktre nas interesuj. Zatem aby odczyta wszystkich klientw,

Rozdzia 7. SQL Server i XML

273

naleaoby uy penej skadni XPath przedstawionej poniej. Jeli adna o nie zostanie wskazana, przyjta zostanie domylna o child.
/child::root/child::customer

Jednak w wikszoci przypadkw uywa si skadni skrconej. W wersji skrconej


powysza instrukcja XPath bdzie mie posta //customer. Podwjny znak ukonika
oznacza o descendant-or-self. Czasami w skadni XPath uywa si rwnie znakw
globalnych. XPath obsuguje nastpujce trzy rodzaje symboli wieloznacznych: *, node()
oraz @*. Symbol wieloznaczny * pasuje do wszystkich elementw bez wzgldu na ich
typ, nie zwraca jedynie wzw atrybutw, tekstowych, komentarzy ani instrukcji przetwarzania. Aby uzyska wszystkie wzy, naley uy skadni node(), ktra zwraca
rwnie wzy wymienione przed chwil. Z kolei symbol wieloznaczny @* pasuje do
wszystkich wzw atrybutw. W tabeli 7.2 przedstawiono skrcon posta wyrae
wykorzystywanych w XPath.
Tabela 7.2. Skrcone wyraenia XPath
Nazwa

Opis

"domylna"

Jeli nie zostanie podana o, uyta bdzie domylna o child.

Skrt oznaczajcy atrybuty.

//

Skrt oznaczajcy o descendant-or-self.

Skrt oznaczajcy self.

..

Skrt oznaczajcy rodzica.

Symbol wieloznaczny, ktry umoliwia dopasowywanie wszystkich wzw


elementw bez wzgldu na typ. Symbol nie zwraca jedynie wzw atrybutw,
tekstowych, komentarzy ani instrukcji przetwarzania.

Symbol uywany jako separator cieek. Uywany rwnie jako cieka bezwzgldna
dla gwnego wza dokumentu.

Aby zwrci wszystkie elementy potomne dla wza customer z poprzedniego przykadu i aby uzyska wycznie wszystkie atrybuty, a take aby odczyta wszystkich
klientw zamieszkujcych w regionie Northwest, naleaoby uy nastpujcej skadni
XPath:
/customer/*
/customer/@*
/customer[@region = "Northwest"]

Czasami uywa si rwnie zoonych lokalizacji cieek bdcych kombinacj


wikszej liczby instrukcji cieki. Oprcz pojedynczego znaku ukonika (/) symbolizujcego wze gwny w XPath istnieje dodatkowa specjalna skadnia. Na przykad
wszystkich potomkw mona wskaza za pomoc dwch znakw ukonika (//).
Mona take wskaza wze rodzica, wpisujc dwie kropki (..). Z kolei aby wybra
biecy element, mona wpisa jedn kropk (.). Ponisza przykadowa instrukcja
XPath wybiera wszystkie wzy elementw wystpujce pod wzem gwnym, ktrych
ID ma warto 10:
//[@id = "10"]

274

SQL Server 2005

Istnieje take moliwo odczytywania atrybutw. Aby wybra atrybuty, uywa si


skadni @. Na przykad aby wybra atrybut id, naley uy skadni /customer/name/@id.
Czasami trzeba przefiltrowa wzy elementw w oparciu o posiadane przez nie atrybuty. Na przykad gdyby istnieli klienci, dla ktrych element stanu nie posiadaby
atrybutu regionu, mona by takich klientw odczyta, uywajc zapisu /customer/
state[@namen.

Funkcje XPath
XPath udostpnia funkcje, dziki ktrym mona zwraca wartoci albo manipulowa
danymi XML. XPath posiada funkcje cigw znakw, zestaww wzw, liczbowe
i logiczne. Najczciej uywa si funkcji position(), count(), contains(), substring(),
sum() i round().
t Funkcja position() zwraca wskazan pozycj w dokumencie. Na przykad
instrukcja /customer[position() = 2n zwrci element customer znajdujcy
si na pozycji numer 2. Skadni funkcji mona skrci przez pominicie
fragmentu position() = . Na przykad zapis /customer[2n odpowiada

wczeniejszej instrukcji.
t Funkcja count() zwraca liczb wzw w zestawie wzw. Na przykad jeli
trzeba zliczy wszystkich klientw, mona wykona instrukcj /count(customer).

A jeli w dokumencie XML zapisane s rwnie wszystkie zamwienia zoone


przez klientw, mona je zliczy instrukcj /customer/orders/counr(order).
t Funkcja contains() pobiera dwa cigi znakw i zwraca true, jeli drugi cig

znakw zawiera si w pierwszym cigu znakw. Na przykad gdy trzeba


sprawdzi, czy imi Tom znajduje si w danym cigu znakw, mona
wykona instrukcj w postaci /customer/name[contains(.,'Tom')n.
t Funkcja substring() zwraca cz wskazanego cigu znakw. Pierwszym

parametrem funkcji jest cig znakw. Drugim parametrem jest pozycja


pocztkowa, za parametr ostatni wskazuje dugo, na przykad
/customer/name[substring(.,1,3)n.
t Funkcja sum(), jak mona si domyli, oblicza sum liczb. Funkcja pobiera

zestaw wzw, a zatem jeli trzeba zsumowa wszystkie ceny produktw


w danym zestawie, mona do tego celu uy funkcji sum(), na przykad:
sum(/products/product/price).
t Funkcja round() zaokrgla liczb do najbliszej liczby cakowitej.

XMLDOM XML Document Object Model


XMLDOM to interfejs programistyczny dla dokumentw XML. Dziki XMLDOM
programista moe adowa, tworzy, modyfikowa i usuwa dane XML. Aby szybko
zrozumie zasad dziaania XMLDOM, najlepiej jest posuy si przykadem. Uytkownicy SQL Servera mog traktowa XMLDOM jakby by zestawem danych, poniewa
stanowi on przechowywan w pamici reprezentacj parsowanego dokumentu XML.

Rozdzia 7. SQL Server i XML

275

Gdy uywany jest XMLDOM, trzeba najpierw zadeklarowa obiekt typu XMLDocument.
Typ XMLDocument rozszerza typ XMLNode, ktry reprezentuje wze dowolnego typu
w dokumencie XML. Po zadeklarowaniu obiektu XMLDocument trzeba zaadowa lub
utworzy dokument XML. Do zaadowania dokumentu XML mona uy metody
load albo loadxml, jak w poniszym kodzie:
Imports System.Xml.XmlDocument
Dim oXMLDOM As New System.Xml.XmlDocument
oXMLDOM.Load("c:\myxml.xml")
'lub, jeli XML istnieje ju jako cig znakw
'oXMLDOM.LoadXml(strXML)

Gdy dokument zostanie ju zaadowany, mona przemierza jego wzy przy uyciu
obiektu XMLNode oraz waciwoci ChildNodes waciwoci DocumentElement. Waciwo DocumentElement zwraca dokument XML, a waciwo ChildNodes zwraca
kolekcj wzw tworzcych dokument. Poniszy kod przemierza dokument XML
i zwraca znajdujce si w nim wzy:
Dim oXMLNode As System.Xml.XmlNode
Dim strResult As String = ""
For Fach oXMLNode In oXMLDOM.DocumentFlement.ehildNodes
strResult += oXMLNode.Name & ": " & _
oXMLNode.InnerText
Next
MsgBox(strResult)

XMLDOM pozwala rwnie na odczytywanie elementw na podstawie nazwy znacznikw suy do tego funkcja GetElementsByTagName. Na przykad jeli istnieje element o nazwie customer, mona odczyta jego warto nastpujc instrukcj:
MsgBox(oXMLDOM.GetFlementsByTagName("customer").Item(0).InnerText)

Funkcja GetElementsByTagName zwraca list wzw, ktr mona parsowa. Powyszy kod odczytuje jedynie pierwszy wze na licie, lecz w razie potrzeby mona
przej w ptli przez wszystkie wzy i po kolei je zwraca. W XMLDOM dostpne
s rwnie analogiczne funkcje GetElementsByID oraz GetElementsByName.
A w jaki sposb w XMLDOM mona uywa XPath? Ot aby zwrci list wzw
odpowiadajcych instrukcji XPath dla XMLDOM, naley uy metody SelectNodes.
Metoda SelectNodes wymaga podania wyraenia, ktrym moe by instrukcja jzyka
XML Stylesheet Language (XSL) lub wyraenie XPath. Mona take skorzysta z metody SelectSingleNode, aby uzyska tylko jeden wze zamiast caej listy wzw.
Poniszy kod wykonuje przekazane wyraenie i przechodzi przez zwrcone wzy, po
czym wypisuje ich wartoci:

276

SQL Server 2005


Dim oNodes As System.Xml.XmlNodeList = oXMLDOM.SelectNodes(txtXPath.Text)
Dim strReturnString as string = ""
Dim oNode As System.Xml.XmlNode
For Fach oNode In oNodes
strReturnString = oNode.OuterXml
Next
Msgbox(strReturnString)

Klasy XPathDocument, XPathNavigator oraz


XPathExpression
Szybkie tworzenie aplikacji przy uyciu XMLDOM nie budzi sprzeciwu, lecz w celu
zaimplementowania skalowalnych aplikacji .NET wykorzystujcych XPath lepiej jest
skorzysta z klas XPathDocument, XPathExpression i XPathNavigator.
t Klasa XPathDocument to wysoko wydajna pami podrczna o charakterze
tylko do odczytu dla dokumentw FOR XML, ktrej gwnym zadaniem jest

parsowanie i wykonywanie zapyta XPath na dokumencie.


t Klasa XPathNavigator bazuje na modelu danych XPath. Klasa pozwala na
wykonywanie zapyta na dowolnej skadnicy danych. Dziki XPathNavigator

mona kompilowa czsto uywane wyraenia XPath.


t Klasa XPathExpression reprezentuje skompilowane wyraenie XPath, ktre
mona wykonywa z poziomu klasy XPathNavigator.

Kod widoczny poniej tworzy instancj obiektu XPathDocument i aduje do niego dane
XML. Nastpnie przy uyciu metody CreateNavigator kod tworzy obiekt XPathNavigator. Ta sama metoda jest rwnie obsugiwana przez klas XMLDocument. Aby wykona wyraenie XPath, kod wywouje metod Select i przekazuje do niej wyraenie.
Jak mona zauway, zadaniem wyraenia jest odszukanie klientw o nazwisku
Tom Rizzo i zwrcenie stanw, w ktrych ci klienci zamieszkuj.
'utworzenie instancji klasy XPathDocument
Dim oXPathDoc As New System.Xml.XPath.XPathDocument("c:\note.xml")
'utworzenie instancji klasy XPathNavigator
Dim oXPathNav As System.Xml.XPath.XPathNavigator = oXPathDoc.ereateNavigator()
'utworzenie instancji klasy XPathIterator
Dim oXPathNodesIt As System.Xml.XPath.XPathNodeIterator = & _
oXPathNav.Select("//customer/name[. = 'Tom Rizzo']/parent::node()/state")
'utworzenie instancji cigu znakw do przechowywania wynikw
Dim strResult as string = ""
'klasa XPathIterator posuy do nawigowania po wygenerowanym zestawie wynikw,
'a nastpnie do wywietlenia wybranych firm Parent Companies
Do While oXPathNodesIt.MoveNext
strResult += oXPathNodesIt.eurrent.Value
Loop
Msgbox(strResult)

Rozdzia 7. SQL Server i XML

277

Wstawianie danych XML do bazy danych


Mamy ju nieco wicej informacji na temat XML-a i XPath, zatem moemy zaj si
metodami wstawiania danych XML do SQL Servera. Mona to zrobi na kilka rnych sposobw. Pierwszy z nich polega na wstawieniu danych XML do kolumny typu nvarchar w bazie danych w ramach zwykej instrukcji INSERT. Jest to standardowa
technika wstawiania tekstu w kolumnie. W SQL Serverze 2005 mona take zamiast
kolumny tekstowej skorzysta z nowego typu danych XML.
Typ danych XML zostanie opisany w nastpnym rozdziale, w ktrym przedstawione
bd rwnie sposoby uycia SQL Server Integration Services (SSIS) do wczytywania danych jako danych typu XML.

Dane XML mona wstawia do bazy danych rwnie na trzy inne sposoby:
t Dane XML mona rozdrobni i wstawi do poszczeglnych wierszy i kolumn

w ramach pojedynczej instrukcji na bazie danych. Do tego celu naley uy


dostawcy zestaww wierszy OPENXML. OPENXML udostpnia widok zestawu
wierszy na dokumencie XML i pozwala na pisanie instrukcji T-SQL
parsujcych dane XML.
t Kolejny sposb polega na wykorzystaniu diagramw aktualizujcych.

Diagramy aktualizujce (ang. updategrams) to struktury danych, ktrych


mona uywa do wyraania zmian w danych za pomoc obrazw sprzed
zmiany i po zmianie. Diagram aktualizujcy jest odczytywany przez
SQLXML, ktry na tej podstawie generuje polecenia SQL niezbdne
do wprowadzenia zmian.

t Ostatni sposb polega na wykorzystaniu dostawcy XML BulkLoad dostpnego

w SQLXML. Przy uyciu dostawcy mona pobra duy zestaw danych XML
i w szybki sposb zaadowa go do SQL Servera.
Od razu nasuwa si pytanie o to, ktry z przedstawionych sposobw jest najlepszy. Ot
kady z nich ma swoje wady i zalety. Jeli najwaniejsz kwesti jest jak najszybsze
i jak najbardziej wydajne zaadowanie danych XML do SQL Servera, wwczas najlepiej
skorzysta z dostawcy BulkLoad. Dostawca BulkLoad nie prbuje wczyta wszystkich
danych XML do pamici, lecz w zamian wczytuje dane XML w postaci strumienia, dokonuje ich interpretacji i aduje do SQL Servera. Dostawca BulkLoad jest oddzielnym komponentem, zatem jeli zachodzi konieczno uycia mechanizmu adujcego
dane wewntrz procedury skadowanej albo funkcji zdefiniowanej przez uytkownika,
dostawcy BulkLoad nie mona uy. Mona go natomiast uywa w rozszerzonej procedurze skadowanej (XP) poprzez wywoanie, lecz takie rozwizanie jest rzadko stosowane i wi si z nim dodatkowe problemy. Dodatkowe problemy wi si gwnie
ze znacznym stopniem skomplikowania procedur rozszerzonych, trudnoci w ich debugowaniu oraz, w przypadku, gdy procedura rozszerzona okae si nieprawidowo zaimplementowana, grob naruszenia zasad bezpieczestwa serwera.

278

SQL Server 2005

Z kolei OPENXML moe by uywany w procedurach skadowanych i funkcjach zdefiniowanych przez uytkownika, poniewa jest to cz natywnego jzyka T-SQL. Cen
jest jednak nisza wydajno takiego rozwizania. OPENXML wymaga, by do parsowania dokumentw majcych pniej podlega przetwarzaniu uywa procedury skadowanej sp_xml_preparedocument. Procedura skadowana aduje specjaln wersj parsera MSXML o nazwie MSXMLSQL, ktrego zadaniem jest parsowanie dokumentu
XML, a nastpnie cay dokument XML zostaje zaadowany do pamici. Uycie OPENXML
wymaga napisania dodatkowego kodu oraz wie si z wikszym wykorzystaniem
zasobw. Wicej informacji na ten temat zostanie przedstawionych w dalszej czci
rozdziau, w punkcie SQLXML: Widoki XML uywajce adnotowanych schematw XML.
Diagramy aktualizujce przydaj si najbardziej w aplikacjach, w ktrych trzeba
zmodyfikowa baz danych i tworzenie adnotowanych schematw (o ktrych wicej
mwimy w dalszej czci rozdziau) oraz wprowadzanie zmian na podstawie adnotowanych schematw nie budzi oporw. SQLXML pobiera diagramy uaktualniajce
i tumaczy je na instrukcje DML jzyka SQL. Gwnym ograniczeniem diagramw
aktualizujcych jest to, e jeli w instrukcjach SQL DML trzeba zastosowa logik
biznesow, wwczas uycie diagramw staje si niemoliwe, poniewa nie mona
uzyskiwa dostpu do wygenerowanych instrukcji DML.
Zanim przejdziemy dalej i zaczniemy poznawa sposoby wykorzystania przedstawionych technologii, musimy najpierw odpowiednio skonfigurowa SQL Server.

Czym jest SQLXML?


SQLXML to dodatkowy zestaw technologii udostpniany oddzielnie od SQL Servera
2000. Zestaw dostpnych technologii zawiera obsug diagramw aktualizujcych,
dostawc SQLXML BulkLoad, obsug FOR XML po stronie klienta oraz obsug SOAP.
Najwysz wersj SQLXML dla SQL Servera 2000 jest wersja 3.0. W przypadku SQL
Servera 2005 SQLXML 4.0 jest dystrybuowany cznie z serwerem, lecz moe by
take dystrybuowany jako samodzielny komponent, a poniewa technologie udostpniane w SQLXML mog by wykorzystywane rwnie poza serwerem, trzeba byo
nada im oddzieln nazw. Naley pamita o tym, by nie myli SQLXML z typem danych XML dostpnym w SQL Serverze 2005, co zdarza si niektrym osobom.
Nie naley rwnie myli SQLXML ze standardem SQL/XML, znanym rwnie jako
standard SQLX. SQLX to standard ANSI/ISO, ktry definiuje sposb uywania danych XML w relacyjnych bazach danych. Microsoft jest czonkiem roboczego komitetu zajmujcego si rozwojem standardu SQLX. Aktualnie SQL Server nie obsuguje
standardu SQLX, lecz udostpnia odpowiadajce mu funkcje w zakresie czynnoci
obsugiwanych przez standard. Na przykad SQLX definiuje sposb publikowania
danych XML, co w SQL Serverze jest realizowane przy uyciu sowa kluczowego FOR XML.
Natomiast do dekompozycji danych XML mona uywa typu danych XML albo dostawcy OPENXML. Dodatkowo SQL Server udostpnia funkcje, ktre nie s objte standardem, takie jak czenie zapyta XQueries oraz zapyta relacyjnych.

Rozdzia 7. SQL Server i XML

279

Konfiguracja SQL Servera


W przypadku SQLXML 3.0 SQL Server 2000 wymaga obecnoci serwera IIS nasuchujcego polece SQL w postaci zapyta URL albo wywoa SOAP. Proces nasuchujcy ISAPI, ktry zostanie opisany pniej, parsuje polecenie SQL, wykonuje je
i zwraca wynik. W SQL Serverze 2005 serwer posiada wbudowany mechanizm nasuchiwania na porcie wywoa HTTP bez koniecznoci angaowania serwera IIS.
Dla celw przykadu prezentowanego w tym rozdziale utworzymy prosty wze kocowy, aby mc wysya do serwera zapytania i diagramy aktualizujce, natomiast
szczegowy opis sposobu obsugi usug sieciowych znajduje si w nastpnym rozdziale. Jeli dotychczas uywane byo narzdzie konfigurujce IIS udostpniane przez
SQLXML 3.0, obecnie w SQL Serverze 2005 nie jest ju ono potrzebne, a zamiast
niego mona skorzysta z obsugi wza kocowego po stronie serwera. Jeli natomiast nadal istotne jest pozostawienie serwera IIS jako warstwy poredniczcej, trzeba
bdzie nadal uywa procesu SQLISAPI udostpnianego w SQLXML 3.0, nasuchujcego dla SQL Servera 2000 albo SQL Servera 2005. SQLXML mona take wywoywa z poziomu aplikacji, poniewa komponent obsuguje model zarzdzanych obiektw, o czym wicej powiemy w punkcie Programowanie SQLXML w .NET i COM
w dalszej czci rozdziau.
Aby skonfigurowa serwer, wystarczy wykona polecenie CRECTE ENDPOINT i pozwoli serwerowi na nasuchiwanie wsadowych polece T-SQL. Utworzymy w tym celu
wirtualny katalog pubs, lecz naley pamita, e katalog ten nie pojawi si na licie
katalogw wirtualnych serwera IIS. Warto mie to na uwadze, poniewa moe istnie
wze kocowy, ktry bdzie usiowa uywa tego samego portu co istniejcy wze
kocowy IIS. SQL i IIS nie mog jednak nasuchiwa jednoczenie na tym samym
porcie. Odpowiedni kod przedstawia si nastpujco:
eRFATF FNDPOINT pubs
STATF = STARTFD
AS TTP (
path='/pubs',
AUT FNTIeATION=(INTFGRATFD),
PORTS = (eLFAR)
)
FOR SOAP(
WSDL = DFFAULT,
BATe FS=FNABLFD
)
GO

OPENXML
Zamiast wasnorcznie parsowa XML do postaci wierszy poprzez adowanie i parsowanie danych XML, a nastpnie iterowanie przez te dane i generowanie odpowiednich polece T-SQL, mona uy funkcji OPENXML. Skadnia OPENXML moe na pocztku wyda si skomplikowana, lecz gdy si j wyprbuje na praktycznym przykadzie,
okae si, e jest ona cakiem zrozumiaa:
OPFNXML(uchwyt int [in],wzorzecwiersza nvarchar[in],[znaczniki byte[in]])
[WIT (DeklaracjaSchematu | NazwaTabeli)]

280

SQL Server 2005

Pierwszym parametrem jest cakowitoliczbowy uchwyt dokumentu XML. Uchwyt to


po prostu unikatowy cakowitoliczbowy identyfikator dokumentu. Mona go odczyta
przy uyciu wbudowanej procedury skadowanej sp_xml_preparedocument. Gdy dokument XML jest przekazywany jako parametr, procedura sp_xml_preparedocument
wykonuje parsowanie dokumentu i zwraca identyfikator, ktry naley przekaza do
funkcji OPENXML. Przekazywany dokument XML moe mie posta tekstow albo moe by to warto typu XML bdcego nowoci w SQL Serverze 2005. Opcjonalnie
mona przekaza przestrze nazw URI (ang. Uniform Resource Identifier) dla wyraenia XPath. Uycie tego parametru bdzie zalee od sposobu uwzgldnienia przestrzeni
nazw w dokumencie XML. Jeli przestrzenie nazw nie bd uywane, wwczas
w wikszoci wywoa procedury skadowanej parametr rwnie nie bdzie uywany.
Z kolei wbudowana procedura skadowana sp_xml_removedocument pobiera cakowitoliczbowy uchwyt do dokumentu XML i usuwa wewntrzn reprezentacj tego dokumentu znajdujc si w pamici, utworzon przez procedur sp_xml_preparedocument.
Procedur sp_xml_removedocument naley wywoywa po zakoczeniu przetwarzania
dokumentu XML. Jeli procedura nie zostanie wywoana, SQL Server zniszczy reprezentacj znajdujc si w pamici w momencie rozczenia si sesji, ktra t reprezentacj utworzya. Jednak wykorzystywanie takiej metody nie jest zalecan praktyk.
Drugim parametrem funkcji OPENXML jest wyraenie XPath, przy uyciu ktrego ma
zosta wykonane parsowanie wierszy. Moe to by dowolne wyraenie od najprostszego
po bardzo skomplikowane.
Trzeci parametr ma charakter opcjonalny i suy do przeczania mechanizmu odwzorowywania z bazujcego na atrybutach do bazujcego na elementach. Domylnie OPENXML
uywa odwzorowania bazujcego na atrybutach, ktremu odpowiada warto 0. Jeli
dokument XML bazuje na elementach, wwczas odwzorowanie naley przeczy na
bazujce na elementach przez przypisanie parametrowi wartoci 2. Z kolei warto 1
nakazuje SQL Serverowi, by domylnie uywa odwzorowa bazujcych na atrybutach, natomiast wzgldem kolumn nieprzetworzonych stosowa odwzorowanie bazujce
na elementach. Warto 8 parametru wskazuje, aby nadmiarowego tekstu nie kopiowa
do metawaciwoci @mp:xmltext, o ktrej powiemy za chwil.
Ostatnim elementem jest klauzula WITH. Klauzula wskazuje definicj schematu dla
nowo tworzonego zestawu wierszy albo tabel, jeli wiadomo, e XML bdzie odwzorowywany na tabel, ktra ju istnieje. Definicja schematu ma nastpujc format:
NazwaKolumny TypKolumny [WzorzecKolumny | MetaProperty][, NazwaKolumny TypKolumny
[WzorzecKolumny | MetaProperty]...]

Poszczeglne czci definicji maj nastpujce znaczenie:


t Nazwazolumny to nazwa kolumny w tabeli.
t Typzolumny to typ danych SQL dla kolumny. Jeli typ danych XML i typ danych

SQL rni si od siebie, mamy wwczas do czynienia z koercj. Oznacza to,


e SQL Server sprbuje znale najbliszy natywny typ danych, w ktrym
bdzie mona przechowywa dane.

Rozdzia 7. SQL Server i XML

281

t Wzorzeczolumny to wyraenie XPath, ktre wskazuje funkcji OPENXML sposb

odwzorowywania wartoci XML na kolumny SQL. Na przykad mona


jawnie wskaza funkcji OPENXML, e dla danej wartoci kolumny naley uy
okrelonego atrybutu albo elementu wza rodzica. Jeli wzorzec kolumny
nie zostanie wskazany, uyte zostanie wskazane odwzorowanie domylne
na atrybut lub element.
t MetaProperty to atrybut metawaciwoci, ktry ma zosta umieszczony

w kolumnie. Atrybuty metawaciwoci w dokumencie XML to atrybuty,


ktre opisuj waciwoci jednostek XML (elementw, atrybutw albo innych
wzw DOM). Atrybuty te nie istniej fizycznie w tekcie dokumentu XML,
lecz OPENXML udostpnia metawaciwoci dla wszystkich jednostek XML.
Dziki metawaciwociom mona wyodrbnia informacje takie jak pozycje
lokalne czy informacje o przestrzeniach nazw wzw XML. W ten sposb
mona uzyskiwa dane bardziej szczegowe, niby to wynikao z tekstowej
reprezentacji dokumentu. Metawaciwoci mona odwzorowywa w instrukcji
OPENXML na kolumny zestawu wierszy, uywajc parametru Wzorzeczolumny.
W tabeli 7.3 przedstawiono dostpne wartoci atrybutu MetaProperty.
Tabela 7.3. Dostpne wartoci atrybutu MetaProperty
Nazwa

Opis

@mp:id

Unikatowy identyfikator wza DOM, ktry jest identyfikatorem


prawidowym do momentu ponownego parsowania dokumentu.

@mp:localname

Lokalny element nazwy wza. Element ten mona umieci w kolumnie,


jeli nazwa wza bdzie potrzebna w pniejszym czasie.

@mp:namespaceuri

Zwraca przestrze nazw URI biecego elementu.

@mp:pre@ix

Zwraca prefiks przestrzeni nazw biecego elementu.

@mp:prev

Zwraca identyfikator wza poprzedniego rwienika.

@mp:xmltext

Zwraca tekstow wersj danych XML. Reprezentacja tekstowa przydaje


si do przetwarzania nadmiarowego oraz do obsugi w kodzie bazy danych
nieznanych sytuacji. Na przykad gdy MetaProperty jest uywana jako
przepenienie i XML ulegnie zmianie, nie trzeba bdzie zmienia kodu
w bazie danych, aby t zmian obsuy.

@mp:parentid

Zwraca identyfikator wza rodzica.

@mp:parentlocalname

Zwraca lokaln nazw wza rodzica.

@mp:parentnamespaceuri

Zwraca przestrze nazw URI rodzica.

@mp:parentpre@ix

Zwraca prefiks rodzica.

Przyjrzyjmy si teraz kilku przykadowym sposobom uycia funkcji OPENXML. Wykorzystamy poniszy prosty dokument XML:
<ROOT>
<authors>
<au_id>172-32-1176</au_id>
<au_lname>White</au_lname>
<au_@name>Johnson</au_@name>

282

SQL Server 2005


<phone>408 496-7223</phone>
<address>10932 Bigge Rd.</address>
<city>Menlo Park</city>
<state>eA</state>
<zip>94025</zip>
<contract>1</contract>
</authors>
<authors>
<au_id>213-46-8915</au_id>
<au_lname>Green</au_lname>
<au_@name>Marjorie</au_@name>
<phone>415 986-7020</phone>
<address>309 63rd St. 411</address>
<city>Oakland</city>
<state>eA</state>
<zip>94618</zip>
<contract>1</contract>
</authors>
</ROOT>. . .

Niektrzy czytelnicy zauwayli ju pewnie w kodzie XML sztuczk, jak si posuylimy. Generowanie przykadowych danych XML to adna frajda, dlatego uylimy
funkcji FOR XML, ktr pniej opiszemy, na tabeli authors w bazie danych pubs.
Jedyna dokonana zmiana wynika z faktu, e wolimy posugiwa si elementami
zamiast atrybutami, dlatego FOR XML zostaa skonfigurowana w taki sposb, by zwrcia dane w formacie bazujcym na elementach.

Celem przykadu jest odczytanie dokumentu XML i zapisanie go w tabeli relacyjnej.


Poniewa uywana jest ju baza danych pubs, najatwiej bdzie odczyta dane i umieci je w nowej tabeli authorsXML w bazie pubs. Wykorzystamy domylne ustawienia
funkcji OPENXML i nie bdziemy uywa adnego jej parametru opcjonalnego. Kod odczyta dokument XML z odwzorowaniem bazujcym na elementach, wykona parsowanie
dokumentu i umieci go w tabeli authorsXML.
eRFATF TABLF [authorsXML] (
[title] [varchar] (20),
[au_id] [varchar] (11)
) ON [PRIMARY]
GO
DFeLARF @idoc int
DFeLARF @doc varchar(1000)
SFT @doc ='
<ROOT>
<authors><au_id>172-32-1176</au_id><au_lname>White</au_lname>
<au_@name>Johnson</au_@name><title>ksika1</title>
<phone>408 496-7223</phone><address>10932 Bigge Rd.</address>
<city>Menlo Park</city><state>eA</state><zip>94025</zip>
<contract>1</contract></authors>
<authors><au_id>213-46-8915</au_id><au_lname>Green</au_lname>
<au_@name>Marjorie</au_@name><title>ksika2</title>
<phone>415 986-7020</phone><address>309 63rd St.
411</address><city>Oakland</city><state>eA</state>
<zip>94618</zip>
<contract>1</contract></authors>

Rozdzia 7. SQL Server i XML

283

</ROOT>'
--utworzenie wewntrznej reprezentacji dokumentu XML
FXFe sp_xml_preparedocument @idoc OUTPUT, @doc
--wykonanie instrukcji SELECT, ktra uywa dostawcy zestawu wierszy OPENXML
INSFRT AuthorsXML (title, au_id)
SFLFeT title, au_id
FROM OPFNXML (@idoc, '/ROOT/authors',2)
WIT (au_id varchar(11),
au_lname varchar(40),
au_@name varchar(20),
title varchar(20),
phone char(12)
)
FXFe sp_xml_removedocument @idoc

Gdybymy nieco zmienili powyszy kod i usunli instrukcj INSERT, pozostawiajc


tylko instrukcj SELECT w postaci SELECT *, SQL Server zwrciby dane XML po parsowaniu majce posta zestawu wierszy.
Wynik zapytania byby nastpujcy:
au_id
----------172-32-1176
213-46-8915

au_lname
-------------------White
Green

au_@name
------------------------Johnson
Marjorie

phone
-------------408 496-7223
415 986-7020

Teraz jednak wida, e niektre dane XML nie zostan zapisane, na przykad adres,
miasto, stan, kod pocztowy i kontrakt. Jeli konieczne bdzie zapisanie wszystkich
danych, mona odczyta cay dokument XML, tworzc dodatkow kolumn i w definicji schematu wykorzystujc polecenie @mp:xmltext w nastpujcy sposb:
catchall nvarchar(1000) '@mp:xmltext'

Ostatni przykad uycia funkcji OPENXML pokazuje, w jaki sposb mona pobra wynik
dziaania funkcji OPENXML i zapisa go w tabeli. T sam czynno wykonano w poprzednim przykadzie, lecz tym razem pokaemy dodatkowo, jak w OPENXML mona
nawigowa po dokumencie XML, korzystajc z wyraenia XPath. Poniewa OPENXML
zwraca relacyjny zestaw wierszy, mona uzyskany wynik poczy z inn tabel,
a nastpnie zapisa wynik we wasnej tabeli. Po wywoaniu tabeli dane XML mona
traktowa jak kade inne dane o charakterze relacyjnym. W naszym przykadzie uyjemy
wynikowego zestawu wierszy XML do poczenia danych z zawartoci tabeli wydawcw, aby zwrci tylko tych autorw, ktrzy mieszkaj w tym samym miecie co
wydawca.
DFeLARF @idoc int
DFeLARF @doc varchar(1000)
SFT @doc ='
<ROOT>
<authors><au_id>172-32-1176</au_id><au_lname>White</au_lname>
<au_@name>Johnson</au_@name>
<phone>408 496-7223</phone><address>10932 Bigge Rd.</address>

284

SQL Server 2005


<city>Menlo Park</city><state>eA</state><zip>94025</zip>
<contract>1</contract>
<books>
<title>Moja ksika1</title>
<title>Moja ksika 2</title>
</books>
</authors>
<authors><au_id>213-46-8915</au_id><au_lname>Green</au_lname>
<au_@name>Marjorie</au_@name>
<phone>415 986-7020</phone><address>309 63rd St. 411</address>
<city>Boston</city><state>MA</state>
<zip>94618</zip><contract>1</contract>
<books>
<title>Moja ksika 3</title>
<title>Moja ksika 4</title>
</books>
</authors>
</ROOT>'
--utworzenie wewntrznej reprezentacji dokumentu XML
FXFe sp_xml_preparedocument @idoc OUTPUT, @doc
SFLFeT a.title, a.au_lname, p.pub_name, p.city
FROM OPFNXML (@idoc, '/ROOT/authors/books',2)
WIT (title varchar(20) './title',
au_id varchar(11) '../au_id',
au_lname varchar(40) '../au_lname',
au_@name varchar(20) '../au_@name',
phone char(12) '../phone',
city varchar(20) '../city'
) AS a
INNFR JOIN publishers AS p
ON a.city = p.city
FXFe sp_xml_removedocument @idoc

Wynik powinien mie nastpujc posta:


title
au_lname
pub_name
city
--------------- -------------------------- -------------------- -------------Moja ksika3 Green
New Moon Books
Boston

Najlepszym sposobem wykorzystania funkcji OPENXML jest uycie jej w procedurze


skadowanej, zwaszcza jeli dane XML s pobierane z warstwy poredniej i umieszczane w bazie danych. Zamiast wykonywa parsowanie w warstwie poredniej, mona wysa dane XML w postaci tekstowej do procedury skadowanej, a potem na serwerze wykona parsowanie danych i umieci je w tabeli w ramach jednej operacji.
W ten sposb znacznie zyskamy na wydajnoci i ograniczymy ilo danych przesyanych w sieci w porwnaniu z przypadkiem, gdy parsowanie byoby wykonywane
w warstwie poredniej i konieczne byoby wysyanie polece T-SQL do serwera
w celu zapisania danych.
Jeli dane XML po parsowaniu maj by wielokrotnie wykorzystywane, wwczas
zamiast co chwila wywoywa funkcj OPENXML, lepiej jest je zapisa w zmiennej
tabelowej. Znacznie przyspieszy to przetwarzanie i zwolni zasoby, ktre serwer bdzie

Rozdzia 7. SQL Server i XML

285

mg wykorzysta do realizacji innych zada. Przedstawiona poniej przykadowa


procedura wykorzystuje OPENXML. Warto zwrci uwag na uycie nowego typu danych
nvarchar(max). W SQL Serverze 2000 naleaoby uy tekstowego typu danych. We
wszystkich nowych rozwizaniach zamiast typu danych text powinno si uywa typu
nvarchar(max), poniewa obsuga typu text moe zosta zakoczona w ktrej z przyszych wersji serwera.
eRFATF PROeFDURF update_authors_OPFNXML (
@doc nvarchar(max))
AS
SFT NOeOUNT ON
--uchwyt dokumentu:
DFeLARF @idoc INT
--utworzenie wewntrznej reprezentacji dokumentu XML
FXFe sp_xml_preparedocument @idoc OUTPUT, @doc
--wykonanie instrukcji SELECT, ktra uywa dostawcy zestaww wierszy OPENXML
INSFRT AuthorsXML (title, au_id)
SFLFeT title, au_id
FROM OPFNXML (@idoc, '/ROOT/authors/books',2)
WIT (title varchar(20) './title',
au_id varchar(11) '../au_id',
au_lname varchar(40) '../au_lname',
au_@name varchar(20) '../au_@name',
phone char(12) '../phone'
)
--wykonanie procedury skadowanej
FXFe update_authors_OPFNXML '
<ROOT>
<authors><au_id>172-32-1176</au_id><au_lname>White</au_lname>
<au_@name>Johnson</au_@name><phone>408 496-7223</phone>
<address>10932 Bigge Rd.</address><city>Menlo
Park</city><state>eA</state><zip>94025</zip><contract>1</contract>
<books>
<title>Moja ksika1</title>
<title>Moja ksika 2</title>
</books>
</authors>
<authors><au_id>213-46-8915</au_id><au_lname>Green</au_lname>
<au_@name>Marjorie</au_@name><phone>415 986-7020</phone>
<address>309 63rd St. 411</address><city>Oakland</city><state>eA</state>
<zip>94618</zip><contract>1</contract>
<books>
<title>Moja ksika 3</title>
<title>Moja ksika 4</title>
</books>
</authors>
</ROOT>'

286

SQL Server 2005

SQLXML widoki XML


uywajce adnotowanych schematw XML
Schematy XML definiuj struktur dokumentu XML w taki sam sposb, w jaki schemat
relacyjny definiuje struktur relacyjnej bazy danych. Przy uyciu schematw mona
definiowa kryteria decydujce o tym, czy dokument XML jest zgodny ze specyfikacj.
Na przykad mona zdefiniowa elementy, atrybuty, hierarchie elementw, kolejno
elementw, typy danych elementw i atrybutw, a take dowolne wartoci domylne
dla elementw i atrybutw. Schematy nie s wymagane w dokumentach XML, lecz
zaleca si ich uywanie zwaszcza, jeli dane XML bd wspuytkowane z innymi
aplikacjami, ktre nie bd potrafiy rozpoznawa danych XML lub ktre nie bd
potrafiy tworzy danych XML bez rozumienia schematu.
Standardem dla schematw jest XML Schema Definition (XSD). Wczeniej stosowano
take technologi opracowan przez XML, noszc nazw XML Data Reduced (XDR).
Technologia XRD bya prekursorem XSD i nie powinno si ju uywa jej w aplikacjach.
W SQL Serverze mona tworzy schemat XML, ktry odwzorowuje si na struktur
relacyjn przy uyciu pewnych specjalnych znacznikw schematu. Rozwizanie takie
przydaje si wwczas, gdy trzeba utworzy widok XML danych relacyjnych. Widok
nie tylko pozwala na wykonywanie zapyta na danych relacyjnych i otrzymywanie
wynikw w postaci XML, ale rwnie umoliwia zachowywanie zmian dziki diagramom uaktualniajcym oraz zbiorczemu adowaniu SQLXML. Tworzenie schematu adnotowanego wymaga troch pracy, lecz jeli pniej uytkownik bdzie intensywnie korzysta z danych XML, powicenie nieco wikszej iloci czasu na
utworzenie schematu na pewno si opaci. Ponadto schematw warto jest uywa
wraz z diagramami uaktualniajcymi, o ktrych wicej powiemy w punkcie Diagramy
uaktualniajce SQLXML w dalszej czci rozdziau.
W niniejszym rozdziale zakadamy, e czytelnik posiada ju pewn wiedz na
temat schematw XML. Czytelnicy, ktrzy takiej wiedzy nie maj, powinni przeczyta wstp do opisu schematw XML na witrynie organizacji W3C pod adresem
http://www.w3.org/TR/xmlschema-0.

Visual Studio zawiera bardzo porczny edytor schematw XML, dziki ktremu uytkownik nie musi generowa schematw rcznie. Poniej znajduje si standardowy
schemat XML dla danych XML authors, ktrych uywalimy w poprzednich punktach. Jak wida, schemat XML jest dokumentem XML. System rozpoznaje, e dany
dokument jest schematem dziki temu, e zadeklarowano w nim przestrze nazw xs,
ktra uywa przestrzeni nazw XSD. Przestrze nazw XSD stanowi odwoanie do
przestrzeni nazw W3C XSD, ktr jest http://www.w3c.org/2001/XMLSchema. Odwoaniu przypisywany jest alias xs, a wszystkie elementy uywaj aliasu w schemacie jako
prefiksu.
Warto rwnie zwrci uwag na sposb, w jaki w schemacie zadeklarowano element
o nazwie CuthorsXMLNew, ktry zawiera pozosta cz danych XML. Nastpnie
w schemacie wystpuje typ complexType, ktry stanowi deklaracj sekwencji ele-

Rozdzia 7. SQL Server i XML

287

mentw XML. Wrd elementw wystpuj ID, imi, nazwisko, numer telefonu oraz
inne informacje dotyczce autorw. Wany jest sposb, w jaki w elementach deklaruje si typ. Schematy mog definiowa typy danych dla elementw i atrybutw,
zatem w naszym schemacie deklarowane s cigi znakw, nieoznaczona liczba cakowita oraz nieoznaczony bajt. Schemat moe zawiera rwnie deklaracje innych
typw, takich jak daty, Boolean, dane binarne i inne.
<?xml version="1.0" encoding="ut@-8"?>
<xs:schema attributeFormDe@ault="unquali@ied"
elementFormDe@ault="quali@ied"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AuthorsXMLNew">
<xs:complexType>
<xs:sequence>
<xs:element name="au_id" type="xs:string" />
<xs:element name="au_lname" type="xs:string" />
<xs:element name="au_@name" type="xs:string" />
<xs:element name="phone" type="xs:string" />
<xs:element name="address" type="xs:string" />
<xs:element name="city" type="xs:string" />
<xs:element name="state" type="xs:string" />
<xs:element name="zip" type="xs:unsignedInt" />
<xs:element name="contract" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Gdy istnieje ju schemat bazowy i trzeba utworzy na jego podstawie schemat adnotowany, ktry bdzie uywany z SQLXML, naley wprowadzi odpowiednie zmiany.
Najpierw trzeba doda odwoanie do odwzorowania schematu XML. W tym celu naley zmodyfikowa schemat XML, dodajc do niego przestrze nazw dla odwzorowania schematu SQL Servera, ktr jest urn:schemas-microsoft-com:mapping-schema.
Dziki temu schematowi posiadany schemat XML mona odwzorowywa na schemat
relacyjnej bazy danych. Przestrzeni nazw nadamy alias sql, aby w odwoaniach do
niej mc uywa symbolu sql:. Zatem aby zmodyfikowa poprzedni schemat w taki
sposb, by obsugiwa on odwzorowanie SQL Servera, naleaoby uy nowego
schematu w nastpujcej postaci:
<?xml version="1.0" encoding="ut@-8" ?>
<xs:schema id="XMLSchema1" targetNamespace="http://tempuri.org/XMLSchema1.xsd"
elementFormDe@ault="quali@ied"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
. . .

W rnych dokumentach czsto wystpuje rwnie przestrze nazw urn:schemasmicrosoft-com:xml-sql. Przestrze ta daje dostp do funkcji SQLXML, ktrej mona
uywa w szablonach lub zapytaniach XPath.

288

SQL Server 2005

Odwzorowanie domylne
Nietrudno si zorientowa, e w poprzednim schemacie dodano po prostu przestrze
nazw dla celw odwzorowywania. Schemat nie zosta wskazany, poniewa SQL Server
obsuguje domylne odwzorowanie midzy schematem relacyjnym oraz schematem
XML. Na przykad typ zoony authors zostaby automatycznie odwzorowany na tabel
authors, cig znakw au_id zostaby automatycznie odwzorowany na kolumn au_id
i tak dalej.

Odwzorowanie jawne
Odwzorowania midzy schematem i typami danych SQL mona take definiowa
w sposb jawny. Odwzorowa domylnych mona uywa w bardzo prostych aplikacjach, natomiast w wikszoci przypadkw uywa si odwzorowania jawnego. Przyczyn s zwykle rnice midzy schematami XML i relacyjnym albo ch utrzymania
wikszej kontroli nad sposobem wykonywania odwzorowa oraz uycia typw danych. Odwzorowanie midzy jednostk XML a tabel SQL definiuje si przy uyciu
znacznika sql:relation, ktry naley do schematu odwzorowania SQLXML. Dla kolumn uywa si znacznika sql:field. Dostpny jest rwnie znacznik sql:datatype,
dziki ktremu mona jawnie odwzorowywa typy danych XML na typy danych SQL
i zapobiega wykonywaniu konwersji niejawnej. Jeli wic zrezygnujemy z domylnego
odwzorowywania dla naszego schematu i dodamy wspomniane znaczniki, schemat
w nowej postaci wygldaby nastpujco:
<?xml version="1.0" encoding="ut@-8"?>
<xs:schema attributeFormDe@ault="unquali@ied" elementFormDe@ault="quali@ied"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microso@tcom:mapping-schema">
<xs:element name="AuthorsXMLNew" sql:relation="AuthorsXMLNew">
<xs:complexType>
<xs:sequence>
<xs:element name="au_id" type="xs:string" sql:@ield="au_id" />
<xs:element name="au_lname" type="xs:string" sql:@ield="au_lname" />
<xs:element name="au_@name" type="xs:string" sql:@ield="au_@name" />
<xs:element name="phone" type="xs:string" sql:@ield="phone" />
<xs:element name="address" type="xs:string" sql:@ield="address" />
<xs:element name="city" type="xs:string" sql:@ield="city" />
<xs:element name="state" type="xs:string" sql:@ield="state" />
<xs:element name="zip" type="xs:unsignedInt" sql:@ield="zip" />
<xs:element name="contract" type="xs:unsignedByte" sql:@ield="contract"
sql:datatype="bit" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Relacje
W relacyjnych bazach danych mona tworzy relacje midzy danymi na podstawie
kluczy, natomiast w celu opisania zdefiniowanych relacji w XML-u naley uy schematw adnotowanych.

Rozdzia 7. SQL Server i XML

289

Jednak w schemacie adnotowanym relacje nabior hierarchicznego charakteru ze


wzgldu na uycie odwzorowania sql:relationship. Mona to traktowa jak zczenie tabeli. Odwzorowanie relacji posiada element rodzica, ktry definiuje relacj albo
tabel rodzica. W odwzorowaniu wystpuje take element rodzic-klucz, ktry wskazuje uywany klucz, a ten z kolei moe skada si z wielu kolumn. Elementy potomka
oraz pary potomek-klucz speniaj tak sam funkcj wobec potomka jak analogiczne
elementy dla rodzica.
Schematy udostpniaj rwnie funkcj odwrotn, dziki ktrej relacje mona wycza.
Jeli z jakiego powodu odwzorowanie powinno rni si od relacji klucz gwnyklucz obcy zdefiniowanej w tabeli, relacja zostanie wyczona dziki atrybutowi inverse.
Sytuacja taka wystpuje w diagramach uaktualniajcych, o ktrych powiemy wicej
w punkcie Diagramy uaktualniajceSQLXML w dalszej czci rozdziau. Atrybutu
inverse uywa si tylko w odniesieniu do diagramw uaktualniajcych.
Wyobramy sobie, e posiadamy dane o autorach i w schemacie relacyjnym dane
autorw s powizane z danymi na temat ksiek za pomoc identyfikatora autora.
Odwzorowanie schematu mona zmieni w taki sposb, by uwzgldniao ono ustanowion relacj odpowiedni kod znajduje si poniej. Zwrmy uwag na fakt, e
odwzorowanie relacji znajduje si w specjalnej sekcji schematu XSD.
<?xml version="1.0" encoding="ut@-8" ?>
<xs:schema id="XMLSchema1" targetNamespace="http://tempuri.org/XMLSchema1.xsd"
elementFormDe@ault="quali@ied"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:sql="urn:schemas-microso@t-com:mapping-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Authors" sql:relation="Authors">
<xs:complexType>
<xs:sequence>
<xsd:element name="Books" sql:relation="Books">
<xsd:annotation>
<xsd:appin@o>
<sql:relationship name="BookAuthors"
parent="Authors"
parent-key="au_id"
child="Books"
child-key="bk_id" />
</xsd:appin@o>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="bk_id" type="xsd:integer" />
<xsd:attribute name="au_id" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xs:element name="au_id" type="xs:string"
sql:@ield="au_id"></xs:element>
<xs:element name="au_lname" type="xs:string"

290

SQL Server 2005

. . .

sql:@ield="au_lname"></xs:element>
<xs:element name="au_@name" type="xs:string"
sql:@ield="au_@name"></xs:element>

<xs:element name="contract" type="xs:boolean"


sql:@ield="contract"
sql:datatype="bit"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Odwzorowywanie kolumn kluczy przy uyciu znacznika sql:key-fields


Wiemy ju, w jaki sposb odwzorowuje si relacje, warto wic sprawdzi, jak wymusi na SQL Serverze prawidowe zagniedanie danych XML. Aby zapewni prawidowe zagniedanie danych, naley wskaza kolumny kluczy wystpujce w tabeli,
ktre odegraj najwiksz rol w tworzeniu hierarchii XML. Aby wskaza serwerowi
odpowiedni kolejno, naley uy odwzorowania sql:key-fields. Wskazuje ono
kolumny, ktre zawieraj wartoci kluczowe. Poniszy schemat wskae SQL Serverowi,
e kolumn kluczow jest kolumna au_id:
<?xml version="1.0" encoding="ut@-8" ?>
<xs:schema id="XMLSchema1" targetNamespace="http://tempuri.org/XMLSchema1.xsd"
elementFormDe@ault="quali@ied"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Authors" sql:relation="Authors"
sql:key-@ields="au_id">
. . .

Pomijanie danych w wynikowych danych XML


przy uyciu znacznika sql:mapped
Znacznik sql:mapped pozwala wskazywa, czy dany element lub atrybut w schemacie
XSD powinien by odwzorowywany na obiekt bazy danych. Jeeli chcemy zrezygnowa z domylnego odwzorowania i pomin dan XML w danych wynikowych,
naley uy atrybutu sql:mapped. Zdarzaj si przypadki, w ktrych niektre dane
XML maj charakter nadmiarowy i nie powinny trafia do tabeli na przykad gdy
uytkownik nie ma kontroli nad schematem XML i chce pomin dane, poniewa
w tabeli nie wystpuje kolumna odpowiednia dla danych. Atrybut sql:mapped jest
atrybutem logicznym, w ktrym warto true oznacza, e odwzorowanie powinno
zosta wykonane, natomiast false e odwzorowanie nie powinno mie miejsca.

Rozdzia 7. SQL Server i XML

291

Tworzenie elementu staego


Gdy istnieje potrzeba utworzenia staego elementu dokumentu XML, ktry powinien
wystpowa nawet w sytuacji braku odwzorowania do tabeli, naley uy odwzorowania sql:is-constant. Odwzorowanie ma charakter logiczny, w ktrym warto
true powoduje, e element zawsze bdzie si pojawia w dokumencie XML. Odwzorowanie sql:is-constant bardzo si przydaje do tworzenia gwnego elementu dokumentu XML. Poniej znajduje si przykad zastosowania odwzorowania:
<?xml version="1.0" encoding="ut@-8" ?>
<xs:schema id="XMLSchema1"
targetNamespace="http://tempuri.org/XMLSchema1.xsd" . . .>
<xs:element name="Root" sql:is-constant="true">
. . .

Ograniczanie wartoci przy uyciu filtra


W niektrych przypadkach konieczne jest filtrowanie wartoci zwracanych do dokumentu XML na podstawie wartoci z bazy danych. Do tego celu uywa si odwzorowa sql:limit-field oraz sql:limit-value, ktre su do definiowania kolumny
podlegajcej filtrowaniu oraz wartoci, na podstawie ktrej filtruje si zawarto kolumny. Wskazywanie wartoci stanowicej podstaw filtrowania nie jest wymagane,
poniewa domylnie SQL Server przyjmie jako podstaw filtrowania warto null.
Ponadto uytkownik moe zdefiniowa wiksz liczb wartoci filtrujcych dla wielu
odwzorowa. Znajdujcy si poniej skrcony przykad ilustruje schemat, ktry ogranicza
zbir zwracanych autorw do osb mieszkajcych w Bostonie:
<?xml version="1.0" encoding="ut@-8" ?>
<xs:schema id="XMLSchema1"
targetNamespace="http://tempuri.org/XMLSchema1.xsd" . . .>
<xs:element name="Root" sql:is-constant="true">
. . .
<xs:element name="Authors"
sql:relation="Authors"
sql:limit-@ield="city"
sql:limit-value="Boston">
. . .

Pozostae mechanizmy odwzorowywania schematw


W wikszoci odwzorowywanych schematw uywane bd odwzorowania opisane
w poprzednich punktach. Pozostae dostpne odwzorowania wraz z krtkim opisem
zostay przedstawione w tabeli 7.4. Na kocu rozdziau znajduje si kompletny przykad schematu adnotowanego.

Diagramy uaktualniajce SQLXML


W poprzednich punktach opisano sposoby rozdrabniania danych przy uyciu OPENXML
oraz odczytywania danych z SQL Servera przy uyciu schematw adnotowanych.
Schematy adnotowane stanowi podstaw diagramw uaktualniajcych, dlatego zostay
opisane najpierw. Dziki diagramom uaktualniajcym mona modyfikowa dane

292

SQL Server 2005

Tabela 7.4. Pozostae mechanizmy odwzorowywania schematw


Nazwa

Opis

sql:encode

Wskazuje, czy naley zwraca adres URL lub dane binarne typu BLOB.
Warto URL powoduje zwrcenie adresu URL, natomiast warto de@ault
oznacza, e naley zwrci dane w bazowym formacie z kodowaniem base-64.

sql:identity

Umoliwia odwzorowywanie kolumny identyfikatorw SQL. Warto


ignore oznacza, e SQL Server wygeneruje warto identyfikatora na
podstawie ustawie w schemacie relacyjnym, natomiast warto useValue
wskazuje, e naley uy innej wartoci. Zwykle odwzorowaniu przypisuje
si warto ignore, chyba e uywany jest diagram uaktualniajcy.

sql:max-depth

Suy do wskazywania gbokoci rekurencji wykonywanej w relacji


rodzica i potomka. Uytkownik moe wskaza liczb z zakresu od 1 do 50.
Przykadem zastosowania moe by generowanie struktury organizacyjnej,
w ktrej pracownicy maj przeoonych i podwadnych.

sql:over@low-@ield

Pozwala na wskazywanie kolumny bazy danych, ktra bdzie zawiera dane


nadmiarowe. Jeeli cz danych XML nie zostaa odwzorowana na relacyjn
baz danych, wwczas dane tego rodzaju trafi do kolumny danych
nadmiarowych. Jako warto odwzorowania wskazuje si nazw kolumny.

sql:use-cdata

Suy do wskazywania, czy dane zwracane przez SQL Server powinny by


umieszczane w sekcji eDATA i przez to by traktowane przez parsery XML
jako zwyke dane tekstowe. W celu wczenia mechanizmu naley
odwzorowaniu przypisa warto 1.

znajdujce si w SQL Serverze, uywajc do tego celu formatu XML. Zamiast pisa
odpowiedni kod T-SQL, zmiany w danych przedstawia si w postaci obrazw sytuacji
sprzed zmiany i po niej majcych format XML. Diagramy uaktualniajce mona wykonywa z poziomu ADO lub ADO.NET, o czym przekonamy si dziki kompletnemu
przykadowi zamieszczonemu na kocu rozdziau.
Pierwszym krokiem pozwalajcym zrozumie dziaanie diagramw uaktualniajcych
XML jest poznanie uywanej przez diagramy przestrzeni nazw urn:schemas-microsoftcom:xml-updategram. W deklaracji przestrzeni nazw przestrze nazw diagramw uaktualniajcych jest zazwyczaj skracana do postaci updg.
Kady diagram uaktualniajcy musi mie co najmniej jeden element sync, ktry jest
elementem XML i zawiera dane majce podlega zmianie zdefiniowane przy uyciu
elementw before i after. Liczba elementw sync moe by wiksza ni jeden. Kady element sync odpowiada jednej transakcji, co oznacza, e wszystkie zmiany wynikajce z definicji elementu s zatwierdzane albo zostaj w caoci wycofane. Element
before zawiera dane w postaci sprzed zmiany. Zwykle konieczne jest wskazanie klucza,
na podstawie ktrego SQL Server bdzie mg odnale dane majce ulec zmianie.
Element before moe zmienia wycznie jeden wiersz tabeli.
Element after zawiera zmienione dane. Nietrudno si domyli, e wstawienie danych
bdzie wymagao zdefiniowania odpowiedniej wartoci elementu after, natomiast
element before nie bdzie posiada adnej wartoci. Z kolei dla usunicia danych
trzeba wskaza warto elementu before, a after bdzie pusty. Dla operacji uaktualniania danych konieczne jest zdefiniowanie wartoci zarwno dla elementu before,
jak i after. Poniej znajduje si diagram uaktualniajcy w najprostszej postaci:

Rozdzia 7. SQL Server i XML

293

<ROOT xmlns:updg="urn:schemas-microso@t-com:xml-updategram">
<updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >
<updg:be@ore>
...
</updg:be@ore>
<updg:a@ter>
...
</updg:a@ter>
</updg:sync>
</ROOT>

Opcjonalnie mona wskaza plik z adnotowanym schematem, ktry jawnie odwzoruje elementy z diagramu uaktualniajcego na kolumny w tabelach. Jeli plik z adnotowanym schematem nie zostanie wskazany, SQL Server uyje odwzorowania domylnego, o czym wspomniano ju w poprzednim punkcie dotyczcym odwzorowywania
schematw adnotowanych. Naley rwnie zaznaczy, e moliwe jest jednoczesne
uywanie odwzorowa bazujcych na elementach oraz odwzorowa bazujcych na
atrybutach. Jednak ze wzgldu na czytelno schematu zaleca si, by zawsze korzysta
tylko z jednego rodzaju odwzorowania.
Aby w diagramie uaktualniajcym wskaza warto pust, naley zastosowa atrybut
nullvalue elementu sync, ktry zdefiniuje symbol zastpczy dla wartoci null. Na
przykad jeli wartoci null ma odpowiada warto nothing, mona by uy poniszego diagramu uaktualniajcego, ktrego skadnia bazuje na atrybutach:
<?xml version="1.0"?>
<authorsupdate xmlns:updg=
"urn:schemas-microso@t-com:xml-updategram">
<updg:sync updg:nullvalue="nothing">
<updg:be@ore>
<Authors au_id="172-32-1176"/>
</updg:be@ore>
<updg:a@ter>
<Authors state="nothing" phone="nothing"/>
</updg:a@ter>
</updg:sync>
</authorsupdate>

W diagramach uaktualniajcych mona take uywa parametrw suy do tego


skadnia $nazwaparametru. Na przykad aby utworzy parametr dla podzbioru autorw,
mona by uy nastpujcego diagramu uaktualniajcego:
<?xml version="1.0"?>
<authorsupdate xmlns:updg=
"urn:schemas-microso@t-com:xml-updategram">
<updg:sync updg:nullvalue="nothing">
<updg:be@ore>
<Authors au_id="$AuthorID"/>
</updg:be@ore>
<updg:a@ter>
<Authors state="nothing" phone="nothing"/>
</updg:a@ter>
</updg:sync>
</authorsupdate>

294

SQL Server 2005

Jeli trzeba uy kolumny identyfikatorw i przekazywa wartoci identyfikatorw


midzy rnymi tabelami, mona do tego celu uy atrybutu at-identity. Atrybut
at-identity jest symbolem zastpczym, w ktrego miejsce w trakcie przetwarzania
SQL Server wstawi prawidow warto. Jeli warto identyfikatora trzeba przekaza z powrotem do klienta, mona do tego celu uy atrybutu returnid. Dziki temu
SQL Server zwrci dokument XML zawierajcy warto identyfikatora ustanowion
po wykonaniu diagramu uaktualniajcego na serwerze.
Dziaanie opisanych atrybutw powinno by jasne po przeanalizowaniu przykadu.
Aby wstawi nowego autora do tabeli authors, usun ju istniejcego autora oraz
zmieni dane jeszcze innego autora, naleaoby uy zaprezentowanego poniej diagramu uaktualniajcego na tabeli authors. W kolejnym punkcie pokaemy, jak naley
zaimplementowa kod .NET z klasami SQLXML, aby mc wykona poniszy diagram.
<?xml version="1.0"?>
<authorsupdate xmlns:updg=
"urn:schemas-microso@t-com:xml-updategram">
<updg:sync updg:nullvalue="nothing">
<updg:be@ore>
</updg:be@ore>
<updg:a@ter>
<Authors au_id="123-22-1232" au_@name="Tom" state="WA" phone="425-882-8080"/>
</updg:a@ter>
<updg:be@ore>
<Authors au_id="267-41-2394"/>
</updg:be@ore>
<updg:a@ter>
</updg:a@ter>
<updg:be@ore>
<Authors au_id="238-95-7766"/>
</updg:be@ore>
<updg:a@ter>
<Authors city="Oakland" phone="212-555-1212"/>
</updg:a@ter>
</updg:sync>
</authorsupdate>

Zbiorcze adowanie danych XML


Jeli do SQL Servera trzeba zaadowa duy zbir danych XML, najlepiej jest zastosowa do tego celu mechanizm Bulkload SQLXML. Nie naley natomiast uywa do
tego celu diagramw uaktualniajcych ani OPENXML, poniewa obydwa wspomniane
komponenty nie radz sobie najlepiej pod wzgldem wydajnociowym z adowaniem
duych iloci danych XML. Od razu mona zada pytanie, jaki zbir jest duym zbiorem
danych. Zaley to od wielu czynnikw, takich jak rozmiar i zoono danych XML.
Mona adowa setki maych plikw XML albo jeden duy plik XML. Jeli uywany
serwer posiada kilka procesorw, znaczn ilo pamici operacyjnej i szybkie dyski,
mona ewentualnie uy OPENXML. Najlepiej natomiast jest przeprowadzi test i sprawdzi,
ktre z rozwiza bdzie dawao akceptowalne rezultaty w przypadku adowania okrelonego zbioru danych.

Rozdzia 7. SQL Server i XML

295

Bulkload XML to obiekt, ktry wywouje si jako element obiektowego modelu

SQLXML. Ten z kolei wywouje funkcje zbiorczego adowania danych SQL Servera,
ktre wykonaj adowanie ze rda danych XML do serwera. Przed uruchomieniem
zbiorczego adowania danych XML warto jest uruchomi ledzenie. W ten sposb
bdzie mona sprawdzi, jakie dokadnie polecenia wykonuje Bulkload, a take naprawi ewentualne bdy powstae w trakcie adowania oraz uzupeni brakujce dane.
Bulkload rozszerza zakres moliwoci schematw odwzorowujcych, o ktrych mwilimy we wczeniejszych punktach rozdziau. Schemat odwzorowujcy wskazuje
komponentowi Bulkload miejsca w bazie danych, do ktrych powinny trafi adowane dane XML. Model obiektowy Bulkload jest bardzo prosty. Zawiera on jedn metod o nazwie Execute oraz szereg waciwoci, ktre su do konfigurowania sposobu
wykonywania zbiorczego adowania danych. Metoda Execute przyjmuje dwa parametry. Pierwszym z nich jest cieka do pliku ze schematem odwzorowywania. Drugi
parametr jest opcjonalny i wskazuje ciek lub strumie pliku XML, ktry ma zosta
zaimportowany.

Znamy ju sposb wykonywania zbiorczego adowania danych, warto zatem teraz


zajrze do tabeli 7.5 prezentujcej poszczeglne waciwoci. Nastpnie opisane zostan
najbardziej interesujce z nich, ktrych zaleca si uywa.
Tabela 7.5. Waciwoci obiektu Bulkload
Nazwa

Opis

Bulkload

Waciwo logiczna, ktra wskazuje, czy naley wykona zbiorcze


adowanie danych. Jeli konieczne jest jedynie utworzenie schematu w bazie
danych bez adowania danych, waciwoci naley przypisa warto @alse.
Wartoci domyln jest true.

eheckeonstraints

Waciwo logiczna o domylnej wartoci @alse, ktra wskazuje,


czy naley sprawdza ograniczenia takie jak klucz gwny i klucz obcy.
Jeli ktre z ogranicze zostanie naruszone, zwrcony zostanie bd.

eonnectioneommand

Waciwo pozwala na wskazywanie obiektu eommand zamiast obiektu


eonnectionString z waciwoci eonnectionString. Jeli wskazywany jest
obiekt eommand, wwczas waciwoci Transaction naley przypisa warto true.

eonnectionString

Cig znakw, ktry suy do przekazywania cigu poczenia do SQL Servera.

FrrorLogFile

Cig znakw sucy do wskazywania cieki, w ktrej maj zosta zapisane


bdy powstae w trakcie zbiorczego adowania danych. Dla kadego bdu
powstanie jeden wpis, a bd zauwaony najpniej bdzie wystpowa na
pocztku listy.

FireTriggers

Waciwo logiczna wskazujca, czy w trakcie adowania danych w tabeli


docelowej naley uruchamia procedury wyzwalane. Wartoci domyln
jest @alse.

ForceTableLock

Waciwo logiczna wskazujca, czy na czas zbiorczego adowania danych


naley zablokowa ca tabel. Wartoci domyln jest @alse.

IgnoreDuplicateKeys

Waciwo logiczna wskazujca, czy naley ignorowa przypadki, w ktrych


do tabeli wstawiane s zduplikowane klucze. Wartoci domyln jest @alse,
ktra oznacza, e wystpowanie duplikatw kluczy bdzie ignorowane.
Jeli waciwoci przypisana zostanie warto true i w danych wystpi
zduplikowana warto klucza, rekord nie zostanie wstawiony do tabeli.

296

SQL Server 2005

Tabela 7.5. Waciwoci obiektu Bulkload cig dalszy


Nazwa

Opis

KeepIdentity

Waciwo logiczna wskazujca, czy naley zachowa wartoci


identyfikatorw znajdujce si w zbiorze XML czy te SQL Server
powinien automatycznie wygenerowa wartoci identyfikatorw.
Domylnie waciwo ma warto true, dziki czemu Bulkload zachowuje
wartoci identyfikatorw znajdujce si w dokumencie XML.

KeepNulls

Waciwo o wartoci domylnej true, ktra wskazuje, czy w przypadku,


gdy kolumna nie zawiera wartoci albo gdy nie naley uywa domylnej
wartoci zdefiniowanej dla kolumny, wstawia warto null.

SchemaGen

Waciwo o wartoci domylnej @alse, ktra wskazuje, czy przed


rozpoczciem zbiorczego adowania danych naley utworzy tabele relacyjne.
Wicej informacji na temat waciwoci znajduje si w dalszej czci punktu.

SGDropTables

Waciwo o wartoci domylnej @alse, ktra wskazuje, czy naley usun


i na nowo utworzy odpowiednie tabele czy te pozostawi tabele ju istniejce.
Waciwo jest uywana wraz z waciwoci SchemaGen. Warto true
powoduje, e tabele zostan usunite i utworzone na nowo.

SGUseID

Waciwo o wartoci domylnej @alse, ktra wskazuje, czy naley uy


identyfikatora ze schematu odwzorowujcego, aby w tabeli relacyjnej utworzy
klucz gwny. Jeli waciwoci przypisana zostanie warto true, wwczas
jako typ danych ktrej z kolumn ze schematu odwzorowujcego naley
wskaza dt::type="id".

TempFilePath

Cig znakw wskazujcy ciek, w ktrej naley tworzy pliki tymczasowe.


Jeli waciwoci nie zostanie przypisana adna warto, wwczas pliki
tymczasowe bd tworzone w lokalizacji wskazywanej przez zmienn
rodowiskow TFMP. Waciwo nie ma znaczenia, jeli waciwoci
Transaction nie zostanie przypisana warto true.

Transaction

Waciwo o wartoci domylnej @alse, ktra wskazuje, czy zbiorcze


adowanie danych powinno zosta wykonane w ramach pojedynczej
transakcji. Jeli waciwoci zostanie przypisana warto true, wwczas
przed zaadowaniem danych do SQL Servera wszystkie operacje zostan
zapisane w pliku tymczasowym. Jeli wystpi bd, caa operacja zbiorczego
adowania danych zostanie wycofana. Waciwoci Transaction nie mona
przypisa wartoci true, jeli adowane s dane binarne.

XML Fragment

Waciwo logiczna wskazujca, czy adowane dane XML s fragmentem


czy nie. Fragment to dokument XML, ktry nie posiada wza gwnego.
Waciwoci naley przypisa warto true, jeli XML jest fragmentem lub
nie przypisywa jej adnej wartoci w przypadku, gdy XML nie jest
fragmentem, poniewa domyln wartoci waciwoci jest @alse.

Pierwsz waciwoci, ktrej dziaanie naley zrozumie, jest waciwo logiczna


Transaction. Zwykle pozostawia si jej domyln warto false, aby zbiorcze adowanie danych nie zachodzio w ramach jednej transakcji. W ten sposb zwikszona
zostanie wydajno caej operacji, lecz z drugiej strony nie bdzie mona jej wycofa
w przypadku, gdyby pojawi si jaki bd.
Kolejn waciwoci jest logiczna waciwo XMLFragment. Jeli przypisze si jej warto true, Bulkload pozwoli na zaadowanie fragmentw XML, czyli dokumentw XML
bez wza gwnego.

Rozdzia 7. SQL Server i XML

297

Jeli w tabeli zdefiniowano ograniczenia i trzeba ich przestrzega w trakcie zbiorczego adowania danych przez Bulkload, wwczas waciwoci CheckConstraints naley
przypisa warto true. Domylnie Bulkload wycza sprawdzanie ogranicze, zyskujc w ten sposb na wydajnoci. Bez wzgldu na to, czy ograniczenia bd sprawdzane czy te nie, najpierw w schemacie odwzorowujcym powinno si umieszcza
klucze gwne, a dopiero potem klucze obce.
Jeli klucze obce maj by ignorowane, logicznej waciwoci IgnoreDuplicatezeys
naley przypisa warto true. Jest to rozwizanie przydatne w sytuacjach, gdy osoba
generujca dane nie wie, jakie dane ju znajduj si w tabeli docelowej i chcemy
unikn sytuacji, gdy Bulkload koczy si niepowodzeniem z powodu wystpienia
zduplikowanych kluczy. Bulkload nie zatwierdzi wiersza ze zduplikowanym kluczem,
lecz od razu przejdzie do przetwarzania nastpnego wiersza.
Wielu projektantw baz danych wykorzystuje kolumny identyfikatorw, aby zagwarantowa unikatowo kluczy w tabeli. Czasami adowany dokument XML posiada
ju element mogcy spenia rol identyfikatora, ktry trzeba zastosowa, zamiast
wykorzystywa SQL Server do generowania wartoci przy uyciu wasnego algorytmu serwera. W tym celu waciwoci zeepIdentity naley przypisa warto true,
ktra jest domyln wartoci waciwoci. Naley przy tym pamita, e jest to
warto globalna, dlatego nie mona zmusi SQL Servera do generowania w niektrych
przypadkach wasnego identyfikatora, a w pozostaych przypadkach uywa identyfikatorw zawartych w danych XML.
Waciwo zeepNulls obiektu Bulkload domylnie ma warto false. Oznacza to, e
Bulkload nie wstawi automatycznie wartoci null w kolumnach, dla ktrych w dokumencie XML zabrako odpowiadajcego atrybutu lub elementu. Jeli waciwoci
zostanie przypisana warto true, naley zachowa szczegln ostrono, poniewa
Bulkload zakoczy swe dziaanie niepowodzeniem w przypadku, gdy wystpowanie
wartoci null w kolumnie bdzie zabronione. W sytuacji, gdy waciwo bdzie mie
warto true i dla kolumny zdefiniowana bdzie warto domylna, Bulkload i tak nie
wstawi w kolumnie wartoci domylnej.
Kolejn interesujc waciwoci Bulkload jest waciwo ForceTableLock, ktra
powoduje zablokowanie tabeli na czas zbiorczego adowania danych. Dziki blokadzie mona zwikszy wydajno operacji adowania, lecz w zamian inni uytkownicy nie bd mieli dostpu do tabeli. Domyln wartoci waciwoci jest false,
co oznacza, e Bulkload zakada blokad na tabel przy kadej operacji wstawiania
wiersza.
Jeeli tabele docelowe jeszcze nie istniej, Bulkload moe odpowiednie tabele utworzy. W tym celu waciwoci SchemaGen naley przypisa warto true. Bulkload odczyta typy danych ze schematu odwzorowujcego i na ich podstawie automatycznie
wygeneruje prawidowy schemat bazy danych. Jeli ju istnieje tabela lub kolumna
o takiej samej nazwie i naley j usun i utworzy na nowo, wwczas waciwoci
SGDropTables naley przypisa warto true.

298

SQL Server 2005

Jeden z kolejnych punktw opisuje sposb uycia Bulkload w rodowisku zarzdzanym.


Bulkload obsuguje .NET i COM, dziki czemu technologii zbiorczego adowania
mona uywa w obydwu rodowiskach.

Odczytywanie danych XML


z bazy danych klauzula FOR XML
Klauzula FOR XML dodana do SQL Servera 2000 pozwala na odczytywanie danych relacyjnych w formacie XML bez koniecznoci przechowywania tych danych w formacie XML. Biorc pod uwag to, jak wielu administratorw baz danych chce przechowywa dane w formacie relacyjnym, a jednoczenie przenosi dane relacyjne do
innych systemw w postaci XML ze wzgldu na elastyczno i uniwersalny sposb
obsugi jzyka XML, klauzula FOR XML jest niewtpliwie bardzo cennym narzdziem
SQL Servera. W niniejszym podrozdziale opisane zostanie dziaanie klauzuli FOR XML
zarwno z perspektywy serwera, jak i klienta, aby przedstawi sposb transformowania danych relacyjnych do formatu XML.

Klauzula FOR XML po stronie serwera


Zapewne wielu czytelnikw ju uywa klauzuli FOR XML, poniewa jest to najprostszy
sposb odczytywania danych relacyjnych z SQL Servera i uzyskiwania ich w formacie
XML. W uproszczonej formie skadnia klauzuli FOR XML rozszerzajcej skadni zapyta
przedstawia si nastpujco:
SFLFeT lista kolumn
FROM lista tabel
W FRF kryteria @iltrowania
FOR XML RAW | AUTO | FXPLIeIT [, XMLDATA] [, FLFMFNTS]
[, BINARY BASF64]

Na kocu podrozdziau przeanalizujemy zmiany, jakie zaszy w dziaaniu FOR XML


w SQL Serverze 2005, na razie jednak skupimy si na najczstszych przypadkach,
w ktrych uywa si klauzuli. Pierwsze z tych przypadkw to uycie klauzuli w trybach CUTO i RCW. Niektrzy uytkownicy korzystaj rwnie z trybu EXPLICIT, lecz
znacznie rzadziej ni z pierwszych dwch trybw. Najczstszym powodem, dla ktrych uytkownicy nie korzystaj z trybu EXPLICIT, jest fakt, e CUTO i RCW w zupenoci zaspokajaj ich potrzeby. Kolejnym powodem jest to, e sposb uycia trybu
EXPLICIT jest do skomplikowany, o czym te si przekonamy. Jeli wystarczy uycie pierwszych dwch trybw, zalecamy ich wykorzystanie, poniewa generowanie
bardziej skomplikowanych struktur XML w trybie EXPLICIT sprawia, e wielu uytkownikw rwie sobie przy tym wosy z gowy.

Rozdzia 7. SQL Server i XML

299

Tryb RAW
W trybie RCW klauzula FOR XML zwraca kolumny jako atrybuty i wiersze jako elementy row.
Poniej znajduje si przykad zastosowania klauzuli FOR XML RCW:
USF pubs
GO
SFLFeT * FROM Authors FOR XML RAW

Oto fragment wynikw zwrconych przez zapytanie:


<row au_id="172-32-1176" au_lname="White" au_@name="Johnson"
phone="408 496-7223" address="10932 Bigge Rd." city="Menlo Park"
state="eA" zip="94025" contract="1"/>
<row au_id="213-46-8915" au_lname="Green" au_@name="Marjorie"
phone="415 986-7020" address="309 63rd St. 411" city="Oakland"
state="eA" zip="94618" contract="1"/>
<row au_id="238-95-7766" au_lname="earson" au_@name="eheryl"
phone="415 548-7723" address="589 Darwin Ln." city="Berkeley"
state="eA" zip="94705" contract="1"/>
<row au_id="267-41-2394" au_lname="O&apos;Leary" au_@name="Michael"
phone="408 286-2428" address="22 eleveland Av. 14" city="San Jose"
state="eA" zip="95128" contract="1"/>

Jak wida, kademu wierszowi odpowiada jeden element wiersza row, a dla kadej
niepustej kolumny tworzony jest atrybut elementu wiersza. Jeli odczytywane s dane
binarne, trzeba dopisa klauzul BINCRY BCSE64. Z kolei aby wraz z danymi XML
uzyska take schemat XML-Data, naley uy klauzuli XMLDCTC.

Tryb AUTO
W trybie CUTO klauzula FOR XML dziaa podobnie jak w trybie RCW, to znaczy kady
wiersz jest zwracany w postaci elementu, a wartoci w kolumnach s zwracane jako
atrybuty. Jedyna rnica wie si z nazw elementu reprezentujcego wiersz, ktr
w trybie CUTO jest nazwa tabeli. Spjrzmy zatem na wynik poniszego zapytania:
USF pubs
GO
SFLFeT * FROM Authors FOR XML AUTO

Skrcone wyniki prezentuj si nastpujco:


<Authors au_id="172-32-1176" au_lname="White" au_@name="Johnson"
phone="408 496-7223" address="10932 Bigge Rd." city="Menlo Park"
state="eA" zip="94025" contract="1"/>
<Authors au_id="213-46-8915" au_lname="Green" au_@name="Marjorie"
phone="415 986-7020" address="309 63rd St. 411" city="Oakland"
state="eA" zip="94618" contract="1"/>
<Authors au_id="238-95-7766" au_lname="earson" au_@name="eheryl"
phone="415 548-7723" address="589 Darwin Ln." city="Berkeley"
state="eA" zip="94705" contract="1"/>
<Authors au_id="267-41-2394" au_lname="O&apos;Leary" au_@name="Michael"
phone="408 286-2428" address="22 eleveland Av. 14" city="San Jose"
state="eA" zip="95128" contract="1"/>
<Authors au_id="274-80-9391" au_lname="Straight" au_@name="Dean"
phone="415 834-2919" address="5420 eollege Av." city="Oakland"

300

SQL Server 2005


state="eA" zip="94609" contract="1"/>
<Authors au_id="341-22-1782" au_lname="Smith" au_@name="Meander"
phone="913 843-0462" address="10 Mississippi Dr." city="Lawrence"
state="KS" zip="66044" contract="0"/>

Nazwa tabeli wyznacza element dla kadego wza, a wartoci kolumn s atrybutami
danego elementu. Zagniedanie elementw jest uzalenione od kolejnoci w klauzuli
SELECT, dlatego kolejnoci pl naley powici szczegln uwag. Ponadto w zapytaniu SELECT z klauzul FOR XML nie mona uywa klauzuli GROUP BY, mona natomiast wykonywa sortowanie przy uyciu klauzuli ORDER BY. Zamiast GROUP BY mona
uywa zagniedonych zapyta SELECT i uzyska podobne wyniki, lecz takie rozwizanie zmniejsza nieco wydajno dziaania. W przypadku wykonywania zcze tryb
CUTO odpowiednio zagniedzi zestaw wynikw, co w wikszoci przypadkw bdzie
dziaaniem podanym. Jeli natomiast wyniki nie maj by zagniedane, trzeba
skorzysta z trybu EXPLICIT i samemu nada format danych XML. Na przykad jeli
trzeba wykona zczenie danych z tabel Publishers oraz Titles i w danych XML
wszystkie tytuy powinny by zagniedane pod odpowiadajcymi im wydawcami,
naleaoby wykona nastpujcy kod:
USF pubs
GO
SFLFeT Publishers.Pub_Name, Titles.Title, Titles.Price
FROM Titles, Publishers W FRF Publishers.Pub_ID = Titles.Pub_ID
FOR XML AUTO

Skrcone wyniki zapytania s nastpujce:


<Publishers Pub_Name="Algodata In@osystems">
<Titles Title="The Busy Fxecutive&apos;s Database Guide" Price="19.9900"/>
<Titles Title="eooking with eomputers:
Surreptitious Balance Sheets"
Price="11.9500"/>
</Publishers>
<Publishers Pub_Name="New Moon Books">
<Titles Title="You ean eombat eomputer Stress!" Price="2.9900"/>
</Publishers>
<Publishers Pub_Name="Algodata In@osystems">
<Titles Title="Straight Talk About eomputers" Price="19.9900"/>
</Publishers>

Wraz z klauzul FOR XML CUTO mona take uywa opcji ELEMENTS. Uytkownicy preferujcy uywanie elementw zamiast atrybutw mog w ten sposb uy trybu CUTO
i uzyska wyniki w postaci bazujcej na elementach, a nie atrybutach. Osobicie wolimy stosowa skadni bazujc na elementach, ktra zwiksza wprawdzie rozmiar
danych XML przede wszystkim przez obecno znacznikw otwierajcych i zamykajcych, jednak wynikowe dane XML s wwczas bardziej czytelne i zrozumiae.

Tryb EXPLICIT
Ostatnim trybem jest EXPLICIT. Jak wskazuje nazwa trybu, umoliwia on sprawowanie
penej kontroli nad sposobem generowania danych XML. Uytkownik musi opisa
sposb, w jaki ma zosta ustrukturyzowany wynikowy dokument XML, a SQL Server
wypeni tak opisany dokument odpowiednimi informacjami. Aby opisa dokument XML,
trzeba uy tabeli uniwersalnej. Tabela uniwersalna zawiera po jednej kolumnie

Rozdzia 7. SQL Server i XML

301

tabeli dla kadej wartoci, ktra ma by zwracana, oraz dwa dodatkowe znaczniki, z ktrych jeden unikatowo identyfikuje znaczniki w danych XML, a drugi identyfikuje relacje
rodzic-potomek. Pozostae kolumny opisuj dane. Tabela 7.6 ilustruje uniwersaln tabel
dla trybu EXPLICIT.
Tabela 7.6. Tabela uniwersalna
Znacznik

Rodzic

Dyrektywa kolumny 1

Dyrektywa kolumny 2

Null

Dana

Dana

Dana

Dana

Dana

Dana

Dyrektywy opisuj sposb, w jaki dane maj by wywietlane w tabeli. Dyrektywy to


specjalne polecenia, ktrych uywa si do wskazania SQL Serverowi sposobu parsowania danych. Format dyrektyw prezentuje si nastpujco:
Flement!Znacznik!Atrybut!Dyrektywa

Poszczeglne fragmenty dyrektywy s od siebie oddzielane znakiem wykrzyknika.


Utwrzmy zatem prost, przykadow tabel, ktra bdzie uywa formatowania
wskazanego powyej. Zamy, e trzeba wywietli autorw, lecz warto au_id
powinna by atrybutem w wynikowych danych XML, a pozostae danych powinny
mie charakter elementw. Takiego wyniku nie uzyskamy ani w trybie RCW, ani w trybie CUTO, poniewa w adnym z nich nie mona uzyska jednoczenie danych bazujcych na atrybutach i elementach. Zapytanie zwracajce dane w podanej przez nas
postaci bdzie mie nastpujc posta:
SFLFeT 1 as Tag, NULL as Parent,
au_id as [Authors!1!au_id], au_lname as [Authors!1]
FROM Authors FOR XML FXPLIeIT

Pierwsz rzecz, ktra si rzuca w oczy, jest obecno kolumn Tag i Parent na licie
kolumn. Kolumny Tag i Parent s wymagane do zidentyfikowania znacznika biecego
elementu, ktrym jest liczba cakowita z przedziau od 1 do 255, oraz rodzica biecego
elementu. W naszym przykadzie dane nie s zagniedane, rodzic ma zawsze warto
null, a znacznikiem jest zawsze warto 1, poniewa zawsze odwoujemy si do tego
samego rodzica. Dalej wida, e uywana jest klauzula CS, ktra zmienia nazw danych tak, aby opisa podane formatowanie XML. Nazwa nadawana kolumnie au_id
wskazuje SQL Serverowi, e naley uy elementu Cuthors, identyfikatora znacznika
1 oraz nazwy atrybutu. Pozostae dane powinny mie charakter elementw, zatem jako ich nazwa wskazywany jest jedynie element oraz nazwa znacznika. Na kocu
wskazywana jest klauzula FOR XML EXPLICIT, poniewa nie chcemy uzyskiwa w wyniku
tabeli uniwersalnej opisujcej struktur XML, lecz sam przetworzon struktur XML.
Zapytanie zwrci wyniki w nastpujcej postaci:
<Authors
<Authors
<Authors
<Authors
<Authors
<Authors
. . .

au_id="409-56-7008">Bennet</Authors>
au_id="648-92-1872">Blotchet- alls</Authors>
au_id="238-95-7766">earson</Authors>
au_id="722-51-5454">DeFrance</Authors>
au_id="712-45-1867">del eastillo</Authors>
au_id="427-17-2319">Dull</Authors>

302

SQL Server 2005

Jak wida, nazwisko autora jest zwracane jako warto elementu. Mona sprawi, by
nazwisko byo elementem zagniedanym pod elementem Cuthors. W tym celu zapytanie naley nieco zmodyfikowa, aby uywa dyrektywy elementu w sposb pokazany
poniej:
SFLFeT 1 as Tag, NULL as Parent, au_id as [Authors!1!au_id],
au_lname as [Authors!1!au_lname!element]
FROM Authors FOR XML FXPLIeIT

W tabeli 7.7 przedstawiono wszystkie dostpne dyrektywy oraz opis kadej z nich.
Tabela 7.7. Dyrektywy FOR XML EXPLICIT
Nazwa

Opis

cdata

Umieszcza dane w sekcji eDATA.

element

Wskazuje, e wskazany element naley zakodowa (tak, by na przykad znak >


zosta zapisany w postaci &gt;) i zaprezentowa jako podelement.

elementxsinil

Dyrektywy naley uy, jeli konieczne jest zwrcenie elementw wygenerowanych


dla wartoci null. W ten sposb zostanie utworzony element z atrybutem
xsi:nil=TRUF.

ID

Pozwala na wskazywanie identyfikatora dla elementu. Kada dyrektywa ID


wymaga, by w klauzuli FOR XML dane byy dane XMLDATA.

IDRFF

Umoliwia atrybutom wskazywanie atrybutw bdcych identyfikatorami,


aby umoliwi tworzenie pocze wewntrz dokumentw.

IDRFFS

Dziaa podobnie do IDRFF, poniewa rwnie pozwala na tworzenie pocze


wewntrz dokumentw, lecz uywa do tego celu struktury IDRFFS zamiast IDRFF.

hide

Ukrywa wyniki, aby nie umieszcza ich w generowanym dokumencie XML.

xml

Dziaa tak samo jak dyrektywa element, lecz nie wykonuje kodowania.

xmltext

Przydaje si do kolumn nadmiarowych OPFNXML, poniewa odczytuje kolumn


i dokleja j do dokumentu.

Zajmijmy si teraz przykadem nieco bardziej skomplikowanym. Aby zwrci wszystkich autorw wraz z tytuami ich ksiek oraz wysokoci honorariw, naleaoby
najpierw wykona zapytanie UNION CLL i poczy ze sob odpowiednie dane z poszczeglnych tabel, a nastpnie trzeba by byo zagniedzi wyniki tak, by wynikowa
hierarchia XML odpowiednio odzwierciedlaa autorw, honoraria i tytuy. Zanim jednak napiszemy odpowiednie zapytanie i uzyskamy wyniki, warto przytoczy kilka
wskazwek oraz opisa sposoby eliminowania bdw z zapyta FOR XML EXPLICIT.
Przede wszystkim wielu uytkownikw uzyskuje bd, wedug ktrego nie otwarto
jeszcze znacznika rodzica. Aby zidentyfikowa bd w zapytaniach FOR XML EXPLICIT,
najprociej jest usun t klauzul z zapytania i sprawdzi posta uzyskiwanych wynikw. W efekcie zwrcona zostanie uniwersalna tabela, w ktrej mona poszuka
bdw. Najprostszym sposobem rozwizania bdu zwizanego z brakiem otwartego
znacznika rodzica jest zamieszczenie kolumny znacznika w klauzuli ORDER BY. Dziki
temu zyskamy pewno, e aden znacznik nie zostanie przetworzony przed znacznikiem go poprzedzajcym, co jest przyczyn wystpowania problemu.

Rozdzia 7. SQL Server i XML

303

Wrmy jednak do zapytania, ktre powinno wygenerowa wyniki w sposb opisany


przed chwil. W zapytaniu od razu bdzie mona zauway, e za pomoc kolumn
Tag i Parent definiuje si kilka relacji rodzic-potomek. W zapytaniu zostanie rwnie
uyta sztuczka z klauzul ORDER BY, aby zyska pewno, e znaczniki rodzica znajd si
w dokumencie XML, zanim rozpoczte zostanie przetwarzanie znacznikw potomkw.
SFLFeT 1 AS Tag, NULL AS Parent,
Authors.au_@name AS [Authors!1!au_@name!element],
Authors.au_lname AS [Authors!1!au_lname!element],
NULL AS [Titleauthor!2!Royaltyper],
NULL AS [Titles!3!Title!element]
FROM
Authors
UNION ALL
SFLFeT 2 AS Tag, 1 AS Parent,
au_@name,
au_lname,
royaltyper,
NULL
FROM Authors INNFR JOIN Titleauthor ON
Authors.au_id = Titleauthor.au_id
UNION ALL
SFLFeT 3 AS Tag, 2 AS Parent,
au_@name,
au_lname,
royaltyper,
title
FROM Authors INNFR JOIN Titleauthor ON Authors.au_id = Titleauthor.au_id
INNFR JOIN Titles ON Titles.title_id = Titleauthor.title_id
ORDFR BY [Authors!1!au_@name!element], [Authors!1!au_lname!element],
[Titleauthor!2!royaltyper], Tag
FOR XML FXPLIeIT

Ucita tabela uniwersalna prezentuje si nastpujco:


Tag
1
2
3
1
2
3
1
2
3
2
3

Parent
NULL
1
2
NULL
1
2
NULL
1
2
1
2

Authors!1!au_@name!element
Abraham
Abraham
Abraham
Akiko
Akiko
Akiko
Albert
Albert
Albert
Albert
Albert

Authors !1 !au_lnameelement
Bennet
Bennet
Bennet
Yokomoto
Yokomoto
Yokomoto
Ringer
Ringer
Ringer
Ringer
Ringer

Z kolei ucity zbir wynikowy ma nastpujc posta:


<Authors>
<au_@name>Abraham</au_@name>
<au_lname>Bennet</au_lname>

304

SQL Server 2005


<Titleauthor Royaltyper="60">
<Titles>
<Title>The Busy Fxecutive&apos;s Database Guide</Title>
</Titles>
</Titleauthor>
</Authors>
<Authors>
<au_@name>Akiko</au_@name>
<au_lname>Yokomoto</au_lname>
<Titleauthor Royaltyper="40">
<Titles>
<Title>Sushi, Anyone?</Title>
</Titles>
</Titleauthor>
</Authors>
. . .

Ju na pierwszy rzut oka wida, e FOR XML EXPLICIT daje znacznie wiksze moliwoci, ale klauzula ta jest zdecydowanie bardziej skomplikowana w uyciu. Jeli wystarczy uycie klauzuli FOR XML CUTO lub RCW i stosowanie trybu FOR XML EXPLICIT, wwczas
napisanie odpowiedniego zapytania bdzie znacznie atwiejsze. Jednak w sytuacjach,
gdy si okae, e FOR XML CUTO i RCW nie speniaj oczekiwa, zawsze mona posuy
si klauzul FOR XML EXPLICIT.

Klauzula FOR XML po stronie klienta


Dotd pisane przez nas zapytania FOR XML byy przetwarzane na serwerze. Jednak
SQLXML pozwala take na przetwarzanie zapyta FOR XML po stronie klienta. Zamiast
przesya sformatowane wyniki XML z serwera do klienta, SQL Server przesya zestaw
wierszy do SQLXML, a SQLXML formatuje wyniki ju po stronie klienta. Przykad
takiego rozwizania zostanie przedstawiony w jednym z kolejnych punktw, powiconym opisowi klas SQLXML.

Uywanie szablonw
W trakcie wykonywania zapyta na SQL Serverze z wykorzystaniem SQLXML mona
uywa szablonw. Szablony grupuj technologie, ktre zostay opisane ju wczeniej w tym rozdziale. W szablonach mona uywa zapyta SQL i XPath oraz trzeba
uywa adnotowanych schematw, ktre utworzono dla widoku XML. Schemat moe
by wpisywany bezporednio bd adowany z pliku. Aby zdefiniowa szablon, trzeba
utworzy plik uywajcy przestrzeni nazw urn:schemas-microsoft-com:xml-sql. Po
wskazaniu przestrzeni nazw do szablonu mona przekazywa zapytania SQL i XPath.
SQLXML bdzie przechowywa szablony w pamici podrcznej, aby zwikszy wydajno. Poniszy szablon wykonuje zapytanie SQL:
<Root><sql:query xmlns:sql=""urn:schemas-microso@t-com:xml-sql"">
SFLFeT * FROM Authors FOR XML AUTO</sql:query></Root>

Aby uy zapytania XPath, skadni sql:query naley zastpi skadni sql:xpath-query.


Poniszy przykad odczytuje wszystkich autorw:

Rozdzia 7. SQL Server i XML

305

<Root><sql:xpath-query xmlns:sql=""urn:schemas-microso@t-com:xml-sql"">/Authors
</sql:xpath-query></Root>

Sposb uycia szablonw zostanie opisany w punkcie Programowanie SQLXML


w .NET i COM w dalszej czci niniejszego rozdziau.

Rozszerzenia klauzuli FOR XML


Sowo kluczowe FOR XML wykonujce transformacj danych relacyjnych do postaci
danych XML jest obsugiwane rwnie w SQL Serverze 2005, lecz posiada take kilka dodatkowych rozszerze. Do gwnych rozszerze w zakresie funkcji FOR XML nale obsuga typu danych XML, znaczne uatwienie sposobu definiowania instrukcji FOR
XML EXPLICIT, a take moliwo umieszczania XSD bezporednio w kodzie. Uytkownicy, ktrzy nie korzystali jeszcze z FOR XML EXPLICIT, szybko doceni to narzdzie. Zrozumienie skadni klauzuli byo wyzwaniem nawet dla dowiadczonych programistw, a gdy zachodzia konieczno sformatowania bardziej skomplikowanych
danych XML w SQL Serverze 2000, jedynym rozwizaniem byo uycie wanie
klauzuli FOR XML EXPLICIT.
Zwracanie wartoci przy uyciu typu danych XML jest obsugiwane przez dodatkow
dyrektyw TYPE klauzuli FOR XML. Gdy w wywoaniu zostanie umieszczona dyrektywa
TYPE, wwczas zamiast generowa dane XML i zwraca je w postaci tekstu SQL Server
zwrci dane wynikowe typu XML. Dziki temu na zbiorze danych wynikowych mona
wykonywa zapytania XQuery i odszukiwa podane informacje. Zbir wynikowy
mona take przypisywa zmiennej albo wstawia go do kolumny typu XML. Ponadto
istnieje moliwo zagniedania instrukcji FOR XML i generowania tak hierarchii zamiast uywania FOR XML EXPLICIT. W ten sposb szybko mona przeksztaca dane
relacyjne, a nawet dane uywajce typu danych XML, na warto typu XML. Poniszy
kod ilustruje sposb uycia nowej dyrektywy TYPE oraz przekazywania jej wynikw
do XQuery, o czym wicej powiemy w nastpnym rozdziale:
SFLFeT (SFLFeT * FROM authors FOR XML AUTO, FLFMFNTS,
TYPF).query('count(//author)')

Nowy tryb PCTH pozwala na wskazywanie przy uyciu XPath miejsca w hierarchii
XML, w ktrym powinno si umieci warto kolumny. W ten sposb mona zrezygnowa z uywania skomplikowanej i rozwlekej klauzuli FOR XML EXPLICIT i zamiast
niej generowa bardziej zoone dane XML, korzystajc z zagniedonych instrukcji
FOR XML i nowego trybu PCTH. Poniej znajduje si przykad uycia nowego trybu PCTH.
Przykadowy kod zmienia nazw gwnego elementu na CuthorsNew, a take tworzy
nowy typ zoony o nazwie Names, ktry przechowuje imi i nazwisko.
SFLFeT au_@name "Names/FirstName", au_lname "Names/LastName"
FROM authors FOR XML PAT ('AuthorsNew')

Ostatnim rozszerzeniem jest obsuga XSD bezporednio w kodzie, dostpna w trybach


RCW i CUTO. Opcjonalnie mona przekazywa dyrektyw XMLSCHEMC bezporednio
w kodzie zapytania. Poniszy przykadowy kod ilustruje sposb uycia dyrektywy
XMLSCHEMC oraz wyniki zwracane przez serwer:

306

SQL Server 2005


SFLFeT * FROM authors FOR XML RAW('Authors'), XMLSe FMA('urn:example.com')
<xsd:schema targetNamespace="urn:example.com"
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:sqltypes="http://schemas.microso@t.com/sqlserver/2004/sqltypes"
elementFormDe@ault="quali@ied">
<xsd:import namespace="http://schemas.microso@t.com/sqlserver/2004/sqltypes"
schemaLocation="http://schemas.microso@t.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="Authors">
<xsd:complexType>
. . .
</xsd:complexType>
</xsd:element>
</xsd:schema>
<Authors xmlns="urn:example.com" au_id="172-32-1176"
au_lname="White" au_@name="Johnson" phone="408 496-7223"
address="10932 Bigge Rd." city="Menlo Park"
state="eA" zip="94025" contract="1" />

Programowanie SQLXML w .NET i COM


SQLXML 4.0 udostpnia model obiektowy, dziki ktremu funkcje SQLXML mona
oprogramowywa zarwno w kodzie zarzdzanym, jak i niezarzdzanym. W kodzie
niezarzdzanym, na przykad w ADO, naley uywa sterownika SSLXMLOLEDB.
Dostawca ten uywa nowego klienta SQL Native Client. Ze wzgldu na ograniczony
zakres ksiki programowanie SQLXML w kodzie niezarzdzanym nie bdzie opisywane. Zamiast tego skupimy si na kodzie zarzdzanym. W Visual Studio do kodu
zarzdzanego naley doda odwoanie do Microsoft.Data.SqlXml, jak na rysunku 7.2.
Rysunek 7.2.
Dodawanie
odwoania
do SQLXML

Rozdzia 7. SQL Server i XML

307

Podzesp zarzdzany przez SQLXML posiada cztery klasy: SqlXmlCommand, SqlXmlParameter, SqlXmlCdapter oraz SqlXmlException. Dziki wymienionym klasom mona wysya polecenia do SQL Servera i przetwarza wyniki po stronie klienta, czyli
na przykad przetwarza instrukcje FOR XML albo wykonywa szablony XML. W kolejnych punktach opiszemy szczegowo kad z klas, ich metody i waciwoci.
Przedstawione zostan rwnie sposoby programowania SQLXML.

SqlXmlCommand
SqlXmlCommand to jedna z najwaniejszych klas, ktra bdzie najczciej uywana

w trakcie korzystania z funkcji SQLXML. W tabeli 7.8 przedstawiono wszystkie


metody klasy, natomiast tabela 7.9 prezentuje wszystkie waciwoci SqlXmlCommand.
Tabela 7.8. Metody klasy SqlXmlCommand
Nazwa

Opis

elearParameters

Czyci wszystkie parametry utworzone dla konkretnego obiektu polecenia.

ereateParameter

Tworzy obiekt SqlXmlParameter, za porednictwem ktrego mona


definiowa nazw i warto parametru.

FxecuteNonQuery

Wykonuje zapytanie, lecz nie zwraca adnej wartoci. Rozwizanie takie


przydaje si, gdy trzeba wywoa diagram uaktualniajcy, ktry nie zwraca
wartoci.

FxecuteToStream

Wykonuje zapytanie i zwraca wyniki do istniejcego obiektu Stream


przekazanego do metody.

FxecuteStream

Wykonuje zapytanie i zwraca wyniki w postaci nowego obiektu Stream.

FxecuteXMLReader

Wykonuje zapytanie i zwraca wyniki w obiekcie XMLReader.

SqlXmlParameter
Klasa SqlXmlParameter pozwala na przekazywanie do kodu parametrw. Klasa ma
bardzo prost konstrukcj, poniewa posiada jedynie dwie waciwoci: Name oraz Value.
Uytkownik wskazuje nazw Name parametru, na przykad customerid, oraz warto
Value, ktr naley przypisa parametrowi. Obiekt SqlXmlParameter tworzy si przez
wywoanie metody CreateParameter obiektu SqlXmlCommand.

SqlXmlAdapter
Obiekt SqlXmlCdapter zapewnia komunikacj midzy zestawami danych .NET oraz
funkcjami SQLXML. Konstruktor obiektu wystpuje w trzech postaciach. W pierwszej postaci konstruktor pobiera obiekt SqlXmlCommand, ktry jest wypeniony odpowiednimi informacjami pozwalajcymi na nawizanie poczenia ze rdem danych.
W drugiej postaci pobierane jest polecenie majce posta tekstow, typ polecenia
w postaci obiektu SqlXmlCommand oraz cig znakw bdcy cigiem poczenia. Ostatnia
posta konstruktora jest bardzo podobna do postaci drugiej jedynie zamiast cigu
znakw z tekstem polecenia pobierany jest obiekt Stream.

308

SQL Server 2005

Tabela 7.9. Waciwoci klasy SqlXmlCommand


Nazwa

Opis

BasePath

cieka do katalogu bazowego, przydatna do definiowania w aplikacji cieek


do plikw arkuszy XSL, schematw odwzorowujcych czy schematw XSD.

elientSideXML

Waciwo logiczna, ktra w przypadku posiadania wartoci true nakazuje


SQLXML przeksztacenie zestaww wierszy do postaci XML po stronie klienta.

eommandStream

Waciwo pozwala na definiowanie polecenia przy uyciu strumienia.


Moliwo tak wykorzystuje si wwczas, gdy trzeba wykona polecenie
pochodzce z pliku.

eommandText

Odczytuje lub ustawia tekst polecenia, ktre ma zosta wykonane.

eommandType

Umoliwia ustawienie lub odczytanie typu polecenia przy uyciu nastpujcych


wartoci: SQLXMLeommandType.Di@@gram, SQLXMLeommandType.Sql,
SQLXMLeommandType.Template, SQLXMLeommandType.TemplateFile,
SQLXMLeommandType.XPath oraz SQLXMLeommandType.UpdateGram.

Namespaces

Pozwala na wskazywanie dla danych XML przestrzeni nazw w formacie


xmlns:x='urn:myschema:Mojaprzestrzenazw'. Gdy uywane s zapytania XPath
kwalifikowane przestrzeni nazw, wwczas konieczne jest wskazanie przestrzeni
nazw wanie przy uyciu waciwoci Namespaces.

OutputFncoding

Waciwo wskazuje rodzaj kodowania danych wynikowych. Domylnie dane


s kodowane w formacie UTF-8, lecz uytkownik moe take wskaza formaty
ANSI, Unicode lub inne prawidowe wartoci kodowania.

RootTag

Waciwo definiuje gwny znacznik dokumentu XML, jeli jest on wymagany.


Zazwyczaj jest to cig znakw root.

SchemaPath

Wskazuje ciek dostpu oraz nazw pliku schematu. Jeeli uywane s cieki
wzgldne bazujce na wartoci waciwoci BasePath, wwczas SQLXML bdzie
szuka pliku w katalogu BasePath. Mona take wskazywa cieki bezwzgldne
w postaci c:\mojaaplikacja\mjschemat.xml.

XslPath

Dziaa tak samo jak waciwo SchemaPath, lecz zamiast cieki do pliku
schematu wskazuje ciek dostpu do pliku transformacji XSL.

Utworzony obiekt posiada tylko dwie metody. Pierwsz z nich jest metoda Fill, do
ktrej przekazuje si zestaw danych ADO.NET. SQLXML wypeni przekazany zestaw
danych danymi zwrconymi przez polecenie. Tak utworzony zestaw danych mona
nastpnie modyfikowa przy uyciu standardowych funkcji obsugi zestaww danych
oraz wywoywa drug metod obiektu o nazwie Update. Parametrem metody Update
jest zestaw danych. W trakcie uaktualniania danych w tabeli SQLXML wykonuje blokowanie optymistyczne.

SqlXmlException
Obiekt SqlXmlException dziedziczy po standardowym obiekcie SystemException
i umoliwia zwracanie wyjtkw SQLXML jako czci kodu. Obiekt posiada waciwo ErrorStream, ktrej uywa si do zwracania bdw. Poniszy kod wykorzystuje waciwo ErrorStream do wywietlenia wszystkich bdw przechwyconych
w ramach wyjtku:

Rozdzia 7. SQL Server i XML

309

. . .
eatch ex As Microso@t.Data.SqlXml.SqlXmlFxception
ex.FrrorStream.Position = 0
Dim oSR As New System.IO.StreamReader(ex.FrrorStream)
Dim strResult As String = oSR.ReadToFnd()
System.eonsole.WriteLine(strResult)
Fnd Try

Przykadowe kody
Aby zilustrowa sposb wykorzystania funkcji udostpnianych przez SQLXML, utworzymy przykadow aplikacj. Nasza aplikacja bdzie wykonywa zbiorcze adowanie
danych XML do bazy danych SQL, a nastpnie wykonywa na danych poszczeglne
funkcje opisywane w tym rozdziale, takie jak klauzula FOR XML, integracja zestaww
danych, uruchamianie szablonw, uywanie diagramw uaktualniajcych, a take
wykonywanie przetwarzania po stronie klienta oraz uywanie obiektw XMLTextReader.
Interfejs uytkownika naszej przykadowej aplikacji widnieje na rysunku 7.3.

Rysunek 7.3. Interfejs uytkownika przykadowej aplikacji

310

SQL Server 2005

Aplikacja posiada ju odwoanie do SQLXML, zatem nie trzeba ponownie wykonywa tego kroku. Aby rozpocz przetwarzanie danych, naley najpierw zaadowa
dane XML do bazy danych i rozdrobni je w poszczeglnych kolumnach relacyjnych.
W kodzie mona by uy OPENXML, lecz zamiast tego zdecydowalimy si zastosowa
Bulkload XML. Aby mc skorzysta z obiektu Bulkload, naley najpierw doda
w Visual Studio odwoanie do obiektu COM Bulkload. Odpowiedni komponent nosi
nazw Microsoft SQLXML Bulkload 4.0 Type Library. Nastpnie w aplikacji trzeba
utworzy obiekt Bulkload. Ponisze polecenie wykona odpowiedni operacj:
Dim oXMLBulkLoad As New SQLXMLBULKLOADLib.SQLXMLBulkLoad4elass()

Nastpnie trzeba ustawi odpowiednie waciwoci obiektu Bulkload. Nie moemy


z gry zakada, e tabela, do ktrej dane maj zosta zaadowane zbiorczo, ju istnieje,
dlatego waciwoci SchemaGen przypisywana jest warto true. Ponadto jeli docelowa tabela ju istnieje, powinno si j usun, a zatem rwnie waciwoci naley
przypisa warto true. W przykadowej aplikacji definiujemy take inne waciwoci,
takie jak lokalizacja pliku z bdami, wskazanie, czy mamy do czynienia z fragmentem
XML, a take informacja, czy naley utrzyma identyfikatory. Najwaniejsz waciwoci jest ConnectionString, poniewa wskazuje ona obiektowi Bulkload sposb,
w jaki naley poczy si z serwerem. Po ustawieniu wszystkich waciwoci aplikacja wywouje metod Execute obiektu Bulkload i przekazuje do niej plik schematu
odwzorowujcego oraz plik z danymi XML, ktre naley zbiorczo zaadowa. Pliki
schematu odwzorowujcego oraz danych XML znajduj si w katalogu przykadowej
aplikacji. Peen kod wykonujcy opisane czynnoci przedstawia si nastpujco:
oXMLBulkLoad.FrrorLogFile = "c:\myerrors.log"
oXMLBulkLoad.SchemaGen = True
oXMLBulkLoad.KeepIdentity = False
oXMLBulkLoad.BulkLoad = True
oXMLBulkLoad.SGDropTables = True
oXMLBulkLoad.XMLFragment = True
oXMLBulkLoad.eonnectionString = streonnectionString
oXMLBulkLoad.Fxecute(txtXMLSchema.Text, txtXMLFile.Text)

Klauzula FOR XML przetwarzanie


po stronie serwera i po stronie klienta
Po zbiorczym zaadowaniu danych XML mona zacz ich przetwarzanie. Dane, ktre
aktualnie s rozdrobnione w poszczeglnych kolumnach, mona na przykad z powrotem
odczyta w postaci XML. Do tego celu mona uy klauzuli FOR XML. Jak pamitamy,
SQLXML pozwala na przetwarzanie danych XML na serwerze oraz na kliencie, natomiast nasza aplikacja pozwoli na wybranie jednego z dwch dostpnych rozwiza.
W kodzie uyjemy wsplnej metody, ktra bdzie wykonywa wszystkie zapytania na
przykadowych danych. Metoda bdzie pobiera szereg parametrw, ktre bd midzy
innymi wskazywa, czy przekazywane zapytanie jest zapytaniem SQL, szablonem
czy te diagramem uaktualniajcym. Pierwsz czynnoci wykonywan przez metod jest
utworzenie obiektu SqlXmlCommand przedstawionego poniej. Jako cig zapytania uyty
jest znany ju zapewne wikszoci uytkownikom standardowy cig poczenia w postaci
"Provider=SSLOLEDB;server=localhost;database=pubs;integrated security=SSPI".
Dim oSQLXMLeommand As New Microso@t.Data.SqlXml.SqlXmleommand(streonnectionString)

Rozdzia 7. SQL Server i XML

311

Nastpnie jako typ polecenia trzeba wskaza typ odpowiedni dla przekazywanego
zapytania. Dla standardowych zapyta SQL typem polecenia jest Sql, jak w poniszym kodzie:
oSQLXMLeommand.eommandType = Microso@t.Data.SqlXml.SqlXmleommandType.Sql

Aby wysa zapytanie FOR XML do serwera, w obiekcie SqlXmlCommand trzeba zdefiniowa tre polecenia. Zapytanie jest przekazywane do metody, dlatego uyjemy do
tego celu zmiennej strSuery:
'przypisanie zapytania
oSQLXMLeommand.eommandText = strQuery

Zapytanie FOR XML mona przetwarza na serwerze albo na kliencie, zatem waciwoci ClientSideXml obiektu polecenia trzeba przypisa warto true lub false. Warto
true bdzie oznacza, e przetwarzanie ma zosta wykonane na kliencie. Po zdefiniowaniu wartoci waciwoci mona ju wykona zapytanie i przeanalizowa wyniki.
Poniszy kod uywa obiektu StreamReader do odczytania wynikw i wstawienia ich
do pola tekstowego dla danych wynikowych. Do tego samego celu mona uy take
obiektu XMLTextReader, ktry przedstawimy w dalszej czci punktu.
'sprawdzenie, czy naley przetwarza po stronie klienta
I@ bUseelientSide = True Then
oSQLXMLeommand.elientSideXml = True
Fnd I@
Dim oStream As System.IO.Stream
oStream = oSQLXMLeommand.FxecuteStream()
oStream.Position = 0
Dim oStreamReader As New System.IO.StreamReader(oStream)
txtResults.Text = oStreamReader.ReadToFnd()
oStreamReader.elose()

Jak mona wywnioskowa na podstawie przytoczonego kodu, uycie klauzuli FOR XML
w SQLXML jest cakiem proste. Najtrudniejsz spraw jest zapewnienie, e zapytanie
FOR XML zostanie wykonane poprawnie i zwrci prawidowe wyniki.

Sposb uycia obiektu XMLTextReader


W niektrych przypadkach zamiast odczytywa dane wynikowe zwracane przez zapytanie SQLXML przy uyciu obiektu StreamReader lepiej jest uy obiektu XMLTextReader. W porwnaniu z obiektem StreamReader obiekt XMLTextReader zapewnia
szybszy dostp do danych XML oraz jest bardziej elastyczny pod wzgldem moliwoci nawigowania w danych XML. Obiekt XMLTextReader parsuje dane XML i pozwala na wykonywanie na nich zapyta przy uyciu XPath. Aby mc uy obiektu
XMLTextReader, wystarczy zamieni wywoanie metody ExecuteStream na wywoanie
metody ExecuteXMLReader obiektu SqlXmlCommand. Po utworzeniu obiektu czytajcego
dane mona skorzysta z metod i waciwoci obiektu czytajcego dane XML i nawigowa po danych XML. Poniszy kod wykorzystuje obiekt czytajcy dane XML i wywietla uzyskane wyniki w interfejsie przykadowej aplikacji:

312

SQL Server 2005


'uycie obiektu XMLTextReader
Dim oXMLTextReader As System.Xml.XmlTextReader
oXMLTextReader = oSQLXMLeommand.FxecuteXmlReader()
Dim strXML As String = ""
While oXMLTextReader.Read()
'poziom elementu
I@ oXMLTextReader.NodeType = XmlNodeType.Flement Then
strXML += "<" & oXMLTextReader.Name & ""
FlseI@ oXMLTextReader.NodeType = XmlNodeType.FndFlement Then
strXML += "</" & oXMLTextReader.Name & ">"
Fnd I@
'wyszukanie atrybutw
I@ oXMLTextReader. asAttributes() Then
Dim i As Integer = 0
Do While (oXMLTextReader.MoveToNextAttribute())
i += 1
strXML += " " & oXMLTextReader.Name & "=" & oXMLTextReader.Value
I@ oXMLTextReader.Attributeeount = i Then
'ostatni atrybut zamknicie elementu
strXML += " />"
Fnd I@
Loop
Fnd I@
Fnd While
txtResults.Text = strXML
oXMLTextReader.elose()

Jak wida, w przypadku prostych operacji takich jak wywietlanie danych XML uycie obiektu czytajcego dane XML jest jedynie dodatkowym utrudnieniem, poniewa
w celu wywietlenia danych trzeba najpierw wykona ich parsowanie. Jednak gdy
trzeba uzyska dodatkowe informacje na temat danych XML, takie jak liczba atrybutw albo elementw, lub gdy konieczne jest uycie wikszego zakresu operacji nawigowania w danych, wwczas wanie obiekt XMLTextReader najlepiej si sprawdzi.

Uywanie parametrw w SQLXML


Aby mc uy parametrw w SQLXML, naley utworzy obiekt SqlXmlParameter.
Nasze zapytanie musi wskazywa, e przekazywany bdzie parametr. Konieczne jest
rwnie odpowiednie zdefiniowanie waciwoci obiektu SqlXmlParameter. Poniszy
fragment kodu prezentuje sposb uycia parametru w zapytaniach SQLXML:
strQuery = "SFLFeT * FROM " & strTable & " W FRF city = ? FOR XML AUTO, FLFMFNTS"
. . .
Dim oSQLXMLParameter As Microso@t.Data.SqlXml.SqlXmlParameter
oSQLXMLParameter = oSQLXMLeommand.ereateParameter()
oSQLXMLParameter.Name = "city"
oSQLXMLParameter.Value = "Oakland"
. . .

Rozdzia 7. SQL Server i XML

313

Wykonywanie zapyta XPath


lub zapyta SQL z szablonami
SQLXML pozwala na wykonywanie zapyta XPath lub SQL. W naszej przykadowej
aplikacji uyjemy szablonu, aby wykona zapytanie SQL oraz zwyk instrukcj
XPath dla zapytania XPath. W aplikacji mona by rwnie uy szablonu dla zapytania
XPath, lecz celem aplikacji jest przedstawienie sposobu uycia typu polecenia XPath.
Poniszy kod ustawia zapytanie SQL z szablonem:
'zaadowanie zapytania
strQuery = "<Root><sql:query xmlns:sql=""urn:schemas-microso@t-com:xml-sql"">SFLFeT
* FROM " & strTable & " FOR XML AUTO</sql:query></Root>"

Nastpnie jako typ polecenia trzeba wskaza szablon dopiero wtedy moliwe bdzie
wykonanie zapytania SQL z szablonem. W aplikacji wskazujemy rwnie element
gwny oraz ciek do pliku adnotowanego schematu XSD:
oSQLXMLeommand.eommandType = Microso@t.Data.SqlXml.SqlXmleommandType.Template
oSQLXMLeommand.SchemaPath = txtXMLSchema.Text
oSQLXMLeommand.RootTag = "ROOT"

Wyniki bd przetwarzane przy uyciu obiektu StreamReader, ktry by prezentowany


ju wczeniej, dlatego nie bdziemy go przedstawia po raz drugi.
Aby wykona zapytanie XPath ponownie, trzeba odpowiednio zdefiniowa zapytanie:
strQuery = "/AuthorsXMLNew[city='Oakland']"

W aplikacji zapytanie XPath jest uywane w sposb bezporedni, dlatego w obiekcie


SqlXmlCommand jako typ zapytania trzeba wskaza XPath. Podobnie jak w przypadku
zapytania SQL z szablonem, powinno si ustawi wze gwny oraz wskaza ciek
dostpu do adnotowanego schematu XSD. Potem powtrnie trzeba uy obiektu
StreamReader, aby przetworzy wyniki w sposb przedstawiony wczeniej.
oSQLXMLeommand.eommandType = Microso@t.Data.SqlXml.SqlXmleommandType.XPath
oSQLXMLeommand.SchemaPath = txtXMLSchema.Text
oSQLXMLeommand.RootTag = "ROOT"

Interakcja z zestawem danych ADO.NET


SQLXML potrafi komunikowa si z zestawem danych ADO.NET za porednictwem
obiektu SqlXmlCdapter. Przy uyciu obiektu SqlXmlCdapter mona wypenia zestaw danych. Nastpnie mona uywa obiektu Dataset w taki sam sposb, w jaki uywa si go
w ADO.NET. Poniszy fragment kodu z przykadowej aplikacji tworzy zapytanie, wykonuje je przy uyciu obiektu SqlXmlCdapter, po czym wypenia zestaw danych uzyskanymi
wynikami. Do wypisania zwrconych wartoci kod wykorzystuje obiekty obsugi strumieni:
strQuery = "SFLFeT * FROM " & strTable & " W FRF city = 'oakland' FOR XML AUTO,
FLFMFNTS"
. . .
Dim oSQLXMLDataAdapter As New _
Microso@t.Data.SqlXml.SqlXmlAdapter(oSQLXMLeommand)

314

SQL Server 2005


Dim oDS As New System.Data.DataSet()
oSQLXMLDataAdapter.Fill(oDS)
'wywietlenie danych XML
Dim oMemStream As New System.IO.MemoryStream()
Dim oStreamWriter As New System.IO.StreamWriter(oMemStream)
oDS.WriteXml(oMemStream, System.Data.XmlWriteMode.IgnoreSchema)
oMemStream.Position = 0
Dim oStreamReader As New System.IO.StreamReader(oMemStream)
txtResults.Text = oStreamReader.ReadToFnd()
oMemStream.elose()

Programowanie diagramw uaktualniajcych


Ostatni fragment przykadowej aplikacji, ktrym si zajmiemy, dotyczy diagramw
uaktualniajcych. Diagramy uaktualniajce pozwalaj na uaktualnianie danych na
SQL Serverze przy uyciu istniejcych dokumentw XML. Diagram uaktualniajcy
jest tworzony w kodzie przy uyciu obiektu StringBuilder. Nastpnie jako typ polecenia wskazywany jest typ UpdateGram. Pozostaa cz kodu jest taka sama jak
pocztkowy kod wykonujcy polecenie i odczytujcy wyniki, zatem ten fragment
pominiemy.
Dim strUpdateGram As New System.Text.StringBuilder()
strUpdateGram.Append("<?xml version='1.0'?><AuthorsXMLNewupdate ")
strUpdateGram.Append("xmlns:updg='urn:schemas-microso@t-com:xml-updategram'>")
strUpdateGram.Append("<updg:sync
updg:nullvalue='nothing'><updg:be@ore></updg:be@ore>")
strUpdateGram.Append("<updg:a@ter><AuthorsXMLNew au_id='123-22-1232'")
strUpdateGram.Append(" au_@name='Tom' state='WA' phone='425-882-8080'/>")
strUpdateGram.Append("</updg:a@ter>")
strUpdateGram.Append("<updg:be@ore><AuthorsXMLNew")
strUpdateGram.Append(" au_id='267-41-2394'/></updg:be@ore>")
strUpdateGram.Append("<updg:a@ter></updg:a@ter>")
strUpdateGram.Append("<updg:be@ore><AuthorsXMLNew")
strUpdateGram.Append(" au_id='238-95-7766'/></updg:be@ore>")
strUpdateGram.Append("<updg:a@ter><AuthorsXMLNew")
strUpdateGram.Append(" city='Oakland' phone='212-555-1212'/>")
strUpdateGram.Append("</updg:a@ter></updg:sync></AuthorsXMLNewupdate>")
strQuery = strUpdateGram.ToString()
. . .
oSQLXMLeommand.eommandType = Microso@t.Data.SqlXml.SqlXmleommandType.UpdateGram

Podsumowanie
W rozdziale opisano technologie obsugi jzyka XML dostpne w SQL Serverze 2000
oraz w SQL Serverze 2005. Do technologii tych nale OPENXML, rozszerzenia zapyta
FOR XML, obiekt XML Bulkload oraz szereg rozwiza SQLXML. W nastpnym rozdziale przedstawionych zostanie kilka obecnych w SQL Serverze 2005 dodatkowych
rozwiza w zakresie obsugi danych XML. Opisane zostan rwnie zmiany, jakim
ulegy niektre rozwizania zaprezentowane w tym rozdziale.

You might also like