Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00191 006351 11244631 na godz. na dobę w sumie
Microsoft SQL Server 2008 od środka Programowanie w języku T-SQL - ebook/pdf
Microsoft SQL Server 2008 od środka Programowanie w języku T-SQL - ebook/pdf
Autor: , Liczba stron:
Wydawca: Promise Język publikacji: polski
ISBN: 978-83-7541-253-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych
Porównaj ceny (książka, ebook, audiobook).

Opanuj zaawansowane techniki programowania w języku T-SQL i implementuj niezawodne rozwiązania
Poznaj efektywne konstrukcje programistyczne i tajniki T-SQL - języka programowania baz danych wbudowanego w SQL Server. Ekspert w dziedzinie T-SQL Itzik Ben-Gan wraz z kolegami z zespołu Microsoft SQL Server i nie tylko zaprezentują praktyczne, zaawansowane metody, które zapewniają maksymalną wydajność kodu.

Dowiedz się jak:
Implementować funkcje, procedury składowane i wyzwalacze w języku T-SQL lub CLR
Dokonywać wyboru między operacjami relacyjnymi a stosowaniem kursorów
Wykorzystywać nowe technologie śledzenia dostępu i modyfikacji danych
Dostosować model współbieżności do wymagań określonej aplikacji
Rozszerzać SQL Server o definiowane przez użytkownika typy CLR
Implementować wsparcie dla danych tymczasowych, danych daty/godziny oraz danych przestrzennych
Określać gdzie i kiedy warto korzystać z technologii XML i dynamicznych instrukcji SQL
Wykorzystywać system Service Broker do niezawodnego, asynchronicznego realizowania zadań

Przykłady kodu są dostępne do pobrania z witryny internetowej.
Dodatek zawiera szczegółowe instrukcje implementacji i wdrożenia wszystkich prezentowanych obiektów CLR
Wymagania systemowe zostały opisane we Wprowadzeniu.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Microsoft® SQL Server® 2008 od środka: Programowanie w języku T-SQL Itzik Ben-Gan Dejan Sarka, Greg Low Ed Katibah, Isaac Kunen i Roger Wolter ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Microsoft® SQL Server™ 2008 od środka: Programowanie w języku T-SQL Edycja polska Microsoft Press Original English language edition copyright © 2010 by Itzik Ben-Gan, Dejan Sarka, Ed Katibah, Greg Low, Roger Wolter, and Isaac Kunen Tytuł oryginału: Inside Microsoft® SQL Server™ 2008: T-SQL Programming Polish edition by APN PROMISE Sp. z o. o. Warszawa 2010 APN PROMISE Sp. z o. o., ul. Kryniczna 2, 03-934 Warszawa tel. +48 22 35 51 642, fax +48 22 35 51 699 e-mail: mspress@promise.pl Wszystkie prawa zastrzeżone. Żadna część niniejszej książki nie może być powielana ani rozpowszechniana w jakiejkolwiek formie i w jakikolwiek sposób (elektroniczny, mechaniczny), włącznie z fotokopiowaniem, nagrywaniem na taśmy lub przy użyciu innych systemów bez pisemnej zgody wydawcy. Microsoft, Microsoft Press, Active Directory, BizTalk, MapPoint, MS, MultiPoint, SQL Server, Visual Basic, Visual C#, Visual Studio oraz Windows są zarejestrowanymi znakami towarowymi Wszystkie inne nazwy handlowe i towarowe występujące w niniejszej publikacji mogą być znakami towarowymi zastrzeżonymi lub nazwami zastrzeżonymi odpowiednich firm Microsoft Corporation. odnośnych właścicieli. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone. APN PROMISE Sp. z o. o. dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE Sp. z o. o. nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód. ISBN: 978-83-7541-063-1 Przekład: Natalia Chounlamany Redakcja: Marek Włodarz Korekta: Magdalena Swoboda, Anna Wojdanowicz Skład i łamanie: MAWart Marek Włodarz ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Moim bratnim duszom, Inie i Mickey’owi – Itzik Ben-Gan ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści Przedmowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 1 Widoki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Co to są widoki? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ORDER BY w widoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Odświeżanie widoków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Rozwiązania modularne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Modyfi kowanie widoków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Opcje widoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 ENCRYPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 SCHEMABINDING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 CHECK OPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 VIEW_METADATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Widoki indeksowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2 Funkcje defi niowane przez użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Wybrane fakty dotyczące funkcji UDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Skalarne funkcje UDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Skalarne funkcje UDF T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Względy wydajnościowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Funkcje UDF wykorzystywane w ograniczeniach . . . . . . . . . . . . . . . . . . . . . . . . 41 Skalarne funkcje UDF CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Podpis SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Tabelaryczne funkcje UDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Wbudowane tabelaryczne funkcje UDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Podział tablicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Opcja ORDER w tabelarycznych funkcjach UDF CLR . . . . . . . . . . . . . . . . . . . . . 73 Tabelaryczne funkcje UDF zawierające wiele instrukcji . . . . . . . . . . . . . . . . . . . . 75 Funkcje UDF wykonywane dla każdego wiersza . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3 Procedury składowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Typy procedur składowanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Procedury składowane defi niowane przez użytkowników . . . . . . . . . . . . . . . . . 84 Specjalne procedury składowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Systemowe procedury składowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Inne typy procedur składowanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== v Interfejs procedur składowanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Skalarne parametry wejściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Parametry tabelowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Parametry wyjściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Rozpoznawanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Informacje o zależnościach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Kompilacje, rekompilacje i ponowne wykorzystywanie planów wykonania . . . 104 Ponowne wykorzystywanie planów wykonania . . . . . . . . . . . . . . . . . . . . . . . . 104 Rekompilacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Sondowanie zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Wytyczne planu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 EXECUTE AS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Parametryzowanie sposobu sortowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Procedury składowane CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 4 Wyzwalacze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Wyzwalacze AFTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Tabele specjalne inserted oraz deleted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Identyfi kowanie liczby przetworzonych wierszy . . . . . . . . . . . . . . . . . . . . . . . 151 Identyfi kowanie typu wyzwalacza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Zatrzymywanie wyzwalaczy dla wybranych instrukcji . . . . . . . . . . . . . . . . . . . 157 Zagnieżdżanie i rekurencja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 UPDATE oraz COLUMNS_UPDATED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Przykładowa inspekcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Wyzwalacze INSTEAD OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Stosowanie wyzwalaczy na poziomie wierszy . . . . . . . . . . . . . . . . . . . . . . . . . 169 Stosowanie wyzwalaczy na widokach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Automatyczna obsługa sekwencji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Wyzwalacze DDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Wyzwalacze na poziomie bazy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Wyzwalacze na poziomie serwera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Wyzwalacze logowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Wyzwalacze CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 5 Transakcje i współbieżność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Co to są transakcje? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Blokady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Rozszerzanie blokad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Poziomy izolacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 READ UNCOMMITTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 READ COMMITTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 REPEATABLE READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 SERIALIZABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Poziomy izolacji bazujące na wersjach wierszy . . . . . . . . . . . . . . . . . . . . . . . . 212 vi ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Punkty zapisu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Zakleszczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Prosty przykład zakleszczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Zakleszczenia wynikające z brakujących indeksów . . . . . . . . . . . . . . . . . . . . . 223 Zakleszczenie z pojedynczą tabelą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 6 Obsługa błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Obsługa błędów bez pomocy konstrukcji TRY/CATCH . . . . . . . . . . . . . . . . . . . . 229 Obsługa błędów z wykorzystaniem konstrukcji TRY/CATCH . . . . . . . . . . . . . . . . 233 TRY/CATCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Funkcje obsługi błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Błędy w transakcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 7 Tabele tymczasowe i zmienne tabelaryczne . . . . . . . . . . . . . . . . . . . . . . 249 Tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Lokalne tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Globalne tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Zmienne tabelaryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Ograniczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 tempdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Zakres i widzialność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Kontekst transakcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Statystyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Operacje wstawiania rejestrowane w minimalnym zakresie . . . . . . . . . . . . . . 270 Aspekty bazy danych tempdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Wyrażenia tabelowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Zestawienie porównawcze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Ćwiczenia podsumowujące . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Porównanie okresów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Najnowsze zamówienia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Podział relacyjny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 8 Kursory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Stosowanie kursorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Obciążenie wynikające z zastosowania kursora . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Przetwarzanie pojedynczych wierszy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Dostęp w oparciu o kolejność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Niestandardowe agregacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Agregacje kroczące . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Maksymalna liczba równoległych sesji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Problem dopasowywania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== vii 9 Dynamiczne instrukcje SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 EXEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Proste przykłady wykorzystania polecenia EXEC . . . . . . . . . . . . . . . . . . . . . . . 321 Polecenie EXEC nie ma interfejsu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Konkatenacja zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 EXEC AT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 sp_executesql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Interfejs polecenia sp_executesql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Limit instrukcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Ustawienia środowiskowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Zastosowanie dynamicznego kodu SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Dynamiczne operacje konserwacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Przechowywanie wyniku obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Dynamiczne fi ltry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Dynamiczne operacje PIVOT/UNPIVOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Iniekcja SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Iniekcja SQL: Kod konstruowany dynamicznie po stronie klienta . . . . . . . . . 369 Iniekcja SQL: kod konstruowany dynamicznie na serwerze . . . . . . . . . . . . . . 370 Ochrona przed atakami typu SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 10 Przetwarzanie danych daty i godziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Typy data/godzina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Manipulowanie danymi daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Funkcje daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Literały . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Określanie dnia tygodnia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Obsługa danych jedynie daty lub jedynie godziny w wersjach wcześniejszych niż SQL Server 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Przykładowe operacje wykonywane na danych daty i godziny . . . . . . . . . . . 393 Problemy związane z zaokrąglaniem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Problemy związane z wykonywaniem zapytań na danych daty i godziny . . . . . 400 Problemy z określaniem wieku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Nakładające się okresy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Grupowanie według tygodni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Dni robocze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Generowanie serii dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 11 Typy CLR defi niowane przez użytkownika . . . . . . . . . . . . . . . . . . . . . . . 413 Teoretyczne wprowadzenie do typów UDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Domeny i relacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Domeny i klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Złożone domeny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Do czego służą klasy złożone? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Język służący do tworzenia typów UDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 viii ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Programowanie typu UDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Wymagania typu UDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Tworzenie typu UDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Instalowanie typu UDT przy użyciu kodu T-SQL . . . . . . . . . . . . . . . . . . . . . . . 429 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 12 Wsparcie dla danych tymczasowych w modelu relacyjnym . . . . . . . 443 Predykaty i sądy z sygnaturą czasową . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Punkty czasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Tabela przeszukiwania zawierająca punkty czasowe . . . . . . . . . . . . . . . . . . . . 446 Problemy związane z danymi częściowo tymczasowymi . . . . . . . . . . . . . . . . . . . 447 Ograniczenia danych częściowo tymczasowych . . . . . . . . . . . . . . . . . . . . . . . 448 Testowanie ograniczeń częściowo tymczasowych . . . . . . . . . . . . . . . . . . . . . . 450 Zapytania wykonywane na tabelach z danymi częściowo tymczasowymi . . 451 Tabele z pełnym wsparciem dla danych tymczasowych . . . . . . . . . . . . . . . . . . . 451 Typ UDT IntervalCID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Testowanie typu IntervalCID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Tabele z danymi w pełni tymczasowymi wykorzystujące typ IntervalCID . . 469 Testowanie ograniczeń dla danych w pełni tymczasowych . . . . . . . . . . . . . . 472 Zapytania wykonywane na tabelach z wsparciem dla danych w pełni tymczasowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Odpakowywanie i pakowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Rozwinięte i zwinięte postacie zbiorów interwałów . . . . . . . . . . . . . . . . . . . . 478 Operator UNPACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 Operator PACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 Szósta postać normalna w praktyce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Dekompozycje poziome i pionowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Szósta postać normalna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 13 XML oraz XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Konwertowanie danych relacyjnych do postaci XML i na odwrót . . . . . . . . . . . 495 Wprowadzenie do XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Generowanie dokumentu XML na podstawie danych relacyjnych . . . . . . . . 499 Szatkowanie danych XML do tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Język XQuery w systemie SQL Server 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Wprowadzenie do XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Nawigacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Iteracja i wartości zwrotne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Typ danych XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Wsparcie dla danych XML w relacyjnej bazie danych . . . . . . . . . . . . . . . . . . . 526 Kiedy warto stosować XML zamiast reprezentacji relacyjnej? . . . . . . . . . . . . 528 Serializowane obiekty XML w bazie danych . . . . . . . . . . . . . . . . . . . . . . . . . . 530 XML jako parametr procedury składowanej . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Dynamiczny schemat relacyjny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 Rozwiązania relacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ix Rozwiązania zorientowane obiektowo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 Wykorzystanie typu danych XML do realizacji dynamicznych schematów . . 543 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 14 Dane przestrzenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Wprowadzenie do danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Podstawowe koncepcje związane z danymi przestrzennymi . . . . . . . . . . . . . . . 550 Dane wektorowe a model typów w standardzie OGC Simple Features . . . . . 550 Współrzędne kartezjańskie i geografi czne . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Identyfi katory SRID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 Standardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Stosowanie elipsoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Dane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Typowe formaty danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Pozyskiwanie danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 Pobieranie danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Przykładowe dane przestrzenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Rozpoczęcie pracy z danymi przestrzennymi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Tworzenie tabeli z kolumną danych przestrzennych . . . . . . . . . . . . . . . . . . . 560 Well-Known Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Konstruowanie obiektów przestrzennych na podstawie ciągów i wstawianie ich do tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Testowanie interakcji podstawowych obiektów . . . . . . . . . . . . . . . . . . . . . . . . 565 Podstawowe operacje przestrzenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Zapytania dotyczące sąsiedztwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Typ GEOGRAPHY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 Prawidłowość danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Problemy z poprawnością danych typu GEOMETRY . . . . . . . . . . . . . . . . . . . . 584 Pomiar długości i powierzchni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 Porównanie pomiarów długości dla instancji GEOMETRY oraz GEOGRAPHY . . 587 Porównanie pomiarów powierzchni dla instancji typu GEOMETRY oraz GEOGRAPHY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Indeksowanie danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 Wprowadzenie do indeksów przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . 589 Indeksy przestrzenne w SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Stosowanie indeksów przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 Indeksy GEOGRAPHY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Plany wykonania zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 Integracja z metodami przestrzennymi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 Stosowanie danych i funkcji przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 Ładowanie danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 Ładowanie danych przestrzennych z plików tekstowych . . . . . . . . . . . . . . . . 599 Odnajdowanie lokalizacji w regionach geografi cznych . . . . . . . . . . . . . . . . . 605 Wyszukiwanie najbliższego sąsiada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 Złączenia przestrzenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 Przetwarzanie danych przestrzennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 x ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Rozszerzanie wsparcia dla danych przestrzennych przy użyciu procedur CLR . . 620 Typy w systemie klienckim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 Rozpraszanie przy użyciu defi niowanej przez użytkownika agregacji Union . . 620 Zbiorniki i budowniczowie: transformacje liniowe . . . . . . . . . . . . . . . . . . . . . 623 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 15 Śledzenie dostępu i modyfi kacji danych . . . . . . . . . . . . . . . . . . . . . . . . . 629 Jaką technologię wykorzystać? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Metody stosowane w poprzednich wersjach SQL Server . . . . . . . . . . . . . . . . 629 Technologie dodane do SQL Server 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Implementacja rozwiązania Extended Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 Hierarchia obiektów Extended Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 Implementacja scenariusza z wykorzystaniem Extended Events . . . . . . . . . . 639 Analiza koncepcji Extended Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 Implementacja rozwiązania SQL Server Audit . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Hierarchia obiektów inspekcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Implementacja scenariusza z wykorzystaniem funkcji Auditing . . . . . . . . . . . 651 Analiza koncepcji SQL Server Audit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 Implementacja rozwiązania Change Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 Implementacja scenariusza z wykorzystaniem funkcji Change Tracking . . . . 658 Kwestie związane z zarządzaniem śledzenia zmian . . . . . . . . . . . . . . . . . . . . . 665 Microsoft Sync Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 Implementacja rozwiązania Change Data Capture . . . . . . . . . . . . . . . . . . . . . . . 670 Implementacja scenariusza z wykorzystaniem Change Data Capture . . . . . . 670 Zarządzanie funkcją Change Data Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 16 Service Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 Konwersacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 Niezawodność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 Wiadomości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 Typ wiadomości DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 Kolejki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 Rozpoczynanie i zakańczanie dialogu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 Punkty końcowe konwersacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 Grupy konwersacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698 Przesyłanie i odbieranie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 Aktywacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 Wewnętrzna aktywacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705 Zewnętrzna aktywacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 Priorytet konwersacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 Obiekt Broker Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714 Przykładowy dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 Zatrute wiadomości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xi Bezpieczeństwo dialogu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728 Uwierzytelnianie asymetryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 Konfi gurowanie zabezpieczeń dialogu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 Trasy i dystrybucja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Protokół Adjacent Broker Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 Punkty końcowe Service Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 Trasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 Rozwiązywanie problemów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 Scenariusze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 Niezawodna architektura SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 Przetwarzanie asynchroniczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 Zastosowania systemu Service Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 Czym jest Service Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Czym nie jest Service Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Service Broker a MSMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Service Broker a BizTalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 Service Broker a Windows Communication Foundation . . . . . . . . . . . . . . . . 757 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 A Materiały pomocnicze dla procedur CLR . . . . . . . . . . . . . . . . . . . . . . . . . 759 Stworzenie bazy danych CLRUtilities: SQL Server . . . . . . . . . . . . . . . . . . . . . . . . 760 Programowanie: Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Tworzenie projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Pisanie kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 Instalacja i testowanie: Visual Studio oraz SQL Server . . . . . . . . . . . . . . . . . . . . . 761 Budowanie i instalacja rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 Testowanie rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789 xii ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Przedmowa N a początek kilka słów o autorze książki. Itzik Ben-Gan jest mentorem, konsultan- tem, prezenterem, szkoleniowcem i pisarzem. Wszystkie te role łączy jeden temat przewodni, a mianowicie Microsoft SQL Server. To jednak nie wszystko. Itzik ściśle współpracuje z wieloma programistami SQL Server z Redmond i otrzymał tytuł MVP (Microsoft Valued Professional). Wspomniane doświadczenie oraz umiejętności pozwo- liły Itzikowi napisać książkę, która przedstawia zagadnienie programowania SQL Server z unikalnej perspektywy. Autor wie, jakie rozwiązania działają, a jakie nie. Zna metody gwarantujące wysoką wydajność, a także te obniżające efektywność. Praca szkoleniowca pozwoliła mu poznać najczęściej zadawane pytania oraz sposoby zrozumiałego prezen- towania zaawansowanych koncepcji programowania SQL Server. Itzik zaprosił kilku autorów do udziału w tworzeniu tej książki. Najnowsze techno- logie SQL Server zostały zaprezentowane przy współpracy z zespołem ds. rozwoju SQL Server. Rozdział poświęcony danym przestrzennym został napisany przez Eda Katibaha (o pseudonimie „Spatial Ed”) oraz Isaaca Kunena, natomiast rozdział dotyczący funkcji Service Broker przez Rogera Woltera. Dejan Sarka pomógł w objaśnieniu technologii CLR i XML oraz stworzył fascynujący rozdział poświęcony wsparciu dla danych tymcza- sowych w modelu relacyjnym, w którym sygnalizuje programistom SQL Server poten- cjalną przydatność operatorów relacyjnych PACK oraz UNPACK – nadal niedostępnych w systemie SQL Server. Greg Low prezentuje różnorodne możliwości śledzenia dostępu oraz modyfi kacji danych i metadanych. Dejan oraz Greg są weteranami SQL Server i razem z Itzikiem pracują w fi rmie Solid Quality Mentors. Osobiście jestem zwolennikiem praktycznego podejścia do nauki programowania. Ta książka zawiera wiele przykładów, które są zaprezentowane w sposób umożliwia- jący uruchamianie ich na własnym serwerze SQL Server. Czytelnicy, którzy nie mają dostępu do systemu SQL Server, mogą pobrać wersję ewaluacyjną produktu SQL Server 2008 ze strony http://www.microsoft.com/sql (do tego celu niezbędny jest identyfi kator Windows Live ID, z wersji ewaluacyjnej Enterprise można korzystać przez 180 dni). Zaleca się uruchamianie przykładów w edycji Enterprise lub Developer SQL Server. Nie trzeba przepisywać fragmentów kodu prezentowanych w książce, wystarczy pobrać kod źródłowy z witryny http://www.InsideTSQL.com. Czytelnikom, którzy nie mają doświadczenia w stosowaniu języka SQL, zaleca się rozpoczęcie nauki od wcześniej opublikowanej książki Microsoft SQL Server 2008: T-SQL Fundamentals. Osobom, które nie miały okazji korzystać z systemu SQL Server, ale pracowały już z innymi produktami wspierającymi technologię SQL, zaleca się lekturę innej książki z tej serii: Microsoft SQL Server 2008 od środka: Zapytania T-SQL. Oczywi- ście można przejść od razu do tej publikacji, która koncentruje się na możliwościach programowania w systemie SQL Server. Aczkolwiek gdy okaże się, że prezentowane w tej książce przykłady zawierają instrukcje o implementacji charakterystycznej dla SQL Server, wspomniane książki mogą okazać się pomocne. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xiii Jestem przekonany, że nawet zaawansowani programiści SQL Server odnajdą w tej książce nowe, efektywniejsze metody realizowania zadań. Zgadzam się z Dejanem, że defi niowane przez użytkowników typy CLR są rzadko stosowane w systemach pro- dukcyjnych. I uwaga ta dotyczy nie tylko defi niowanych przez użytkowników typów, ale również funkcji, wyzwalaczy oraz procedur składowanych CLR. Ta książka przed- stawia wiele przykładowych rozwiązań, demonstrując ich implementację w wersji C# oraz Microsoft Visual Basic, czyli najpopularniejszych językach CLR. Autorzy zalecają rozważne stosowanie obiektów CLR ze względu na ich wpływ na wydajność. Itzik nie tylko prezentuje ogólne dyrektywy dotyczące wydajności, ale informuje również, ile trwało wykonywanie alternatywnych rozwiązań na jego komputerze. Oczywiście czy- telnicy mogą przetestować rozwiązania na własnych maszynach. Czynnik wydajności jest brany pod uwagę nie tylko w przypadku konstrukcji CLR. Każdy rozdział książki zawiera wskazówki prowadzące do podniesienia efektywności. Na przykład w rozdziale 7 „Tabele tymczasowe i zmienne tabelaryczne” można dowie- dzieć się, kiedy lepiej jest zastosować tabele tymczasowe, a kiedy zmienne tabelaryczne. Itzik wykorzystuje proste przykłady, interpretując plany wykonania zapytań i prezen- tując sposób zastosowania liczników we/wy do porównania alternatywnych metod rea- lizowania tego samego zadania. Wspomniałem już, że napisany przez Dejana Rozdział 12 „Wsparcie dla danych tymczasowych w modelu relacyjnym” jest fascynujący. Dlaczego? Podzielę się z Wami pewnym sekretem. Jakiś czas temu rozważaliśmy zaimplementowanie specjalnych funk- cji wspierających obsługę tymczasowych danych w SQL Server. Podjęliśmy intensywne działania, a zespół programistów SQL Server nawiązał współpracę z wiodącymi ośrod- kami naukowymi. Jeden z liderów technicznych zmienił nawet numer rejestracyjny swojego samochodu na „TIME DB”. Co stało się z tym projektem? Implementacja była kosztowna i złożona. Wielokrotnie dokonywana ocena alternatyw nie pozwoliła wyłonić zdecydowanego zwycięscy. I stale pojawiał się ten sam kontrargument: „przecież można osiągnąć ten sam cel w inny sposób”. Za każdym razem, gdy ktoś próbował podważyć to twierdzenie, ktoś inny publikował fragment kodu demonstrujący, że można zreali- zować konkretne zadanie przy użyciu istniejących funkcji SQL Server. Jednak nie znam nikogo, kto zaprezentowałby to zagadnienie w sposób tak kompleksowy, jak Dejan w rozdziale 12 tej książki! Miałem okazję pracować w tym samym zespole co Roger Wolter, gdy był on odpo- wiedzialny za rozwój nowej funkcji Service Broker w SQL Server 2005. Napisany przez Rogera rozdział 16 stanowi doskonałe odzwierciedlenie jego osobowości: dokładny i konkretny w perfekcyjnej formie. Początkujący użytkownicy funkcji Service Broker mogą rozważyć rozpoczęcie lektury od końca rozdziału, gdzie prezentowane są scena- riusze zastosowania funkcji Service Broker, a także krótkie porównanie funkcji Service Broker z funkcjami wspomagającymi komunikację w rozwiązaniach Microsoft Message Queue (MSMQ), BizTalk oraz Windows Communication Foundation (WCF). Brazylijski bank Itau oraz serwis MySpace to dwaj przykładowi klienci SQL Server, którzy wyko- rzystują funkcję Service Broker do różnych celów. Bank Itau stosuje funkcję Service Bro- ker w procesie przetwarzania wsadowego. Natomiast w MySpace funkcja Service Broker xiv Przedmowa ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== tworzy platformę komunikacji między setkami serwerów SQL Servers wspierającymi pracę witryny społecznościowej MySpace.com. Jestem przekonany, że ta książka jest warta przeczytania i okaże się pomocna dla początkujących oraz bardziej doświadczonych użytkowników SQL Server. Stano- wi ona nieocenione źródło wiedzy dla programistów, architektów baz danych oraz administratorów. Lubor Kollar Group Program Manager Zespół SQL Server Customer Advisory Microsoft, Redmond, Washington USA. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Przedmowa xv Podziękowania W iele osób przyczyniło się do powstania obydwu książek Microsoft SQL Server 2008 od środka: Zapytania w języku T-SQL oraz Microsoft SQL Server 2008 od środka: Pro- gramowanie w języku T-SQL i chciałbym podziękować im za pomoc. Niektóre osoby były bezpośrednio zaangażowane w proces tworzenia lub edycji książki, inne dostarczyły wsparcia, porad bądź inspiracji. Dziękuję współautorom książki Zapytania T-SQL* Luborowi Kollar, Dejanowi Sarka oraz Stevowi Kass, a także współautorom książki Programowanie T-SQL Dejanowi Sarka, Rogerowi Wolter, Gregowi Low, Edowi Katibah oraz Isaacowi Kunen – praca z Wami była dla mnie zaszczytem. Jestem pod wrażeniem Waszej wiedzy i doświadczenia, a lek- tura Waszych publikacji to prawdziwa przyjemność. Dziękuję za to, że zgodziliście się wziąć udział w tym projekcie. Podziękowania dla Lubora nie tylko za bezpośredni udział (napisanie rozdzia- łu książki Zapytania T-SQL i przedmowy do książki Programowanie T-SQL), ale także za wsparcie, porady, przyjaźń oraz inspirację. Mam nadzieję, że wkrótce znowu będzie- my mieli okazję spędzić ze sobą więcej czasu, spacerując, pijąc oraz rozmawiając o SQL i nie tylko. Podziękowania dla Dejko – Twoja wiedza o modelu relacyjnym jest godna uznania. Każda nasza rozmowa stanowi dla mnie okazję do zdobycia nowych informacji lub pogłębienia dotychczasowej wiedzy. Podoba mi się to, że nie ulegasz trendom i nie podążasz ślepo za opiniami osób uważanych za ekspertów dziedzinowych. Masz włas- ne zdanie i potrafi sz spojrzeć na wiele kwestii z innej perspektywy. Dziękuję za to, że zgodziłeś się współuczestniczyć w tworzeniu tej książki, a także za twoją przyjaźń. Czas spędzony z Tobą jest dla mnie zawsze przyjemnością. Musimy kiedyś zmierzyć się ponownie z tą listą piw, w końcu to już prawie 10 lat! Podziękowania dla redaktora technicznego Steva Kass, który dysponuje unikatowym połączeniem talentu matematycznego, SQL oraz literackiego. Mam świadomość, że nie- łatwo było zajmować się jednocześnie redakcją książki i pisaniem własnych rozdziałów, tym większa jest moja wdzięczność. Pewnie moje słowa wprowadzą Cię w zakłopotanie, ale obserwowanie geniusza w akcji było dla mnie bardzo interesującym doświadcze- niem. Przywodziło mi na myśl fragment powieści Williama Goldmana zatytułowanej Narzeczona księcia, w którym opisana została praca Domingo Montoya nad mieczem dla sześciopalczastego człowieka. Umachandarowi Jayachandran (UC) ogromnie dziękuję za pomoc w redakcji wybranych rozdziałów. Twoja wiedza o T-SQL jest godna podziwu i bardzo się cieszę, że mogłeś wziąć udział w projekcie. Chciałbym również podziękować Bobowi Beau- chemin za recenzję rozdziału poświęconego danym przestrzennym. Lubię czytać Twoje * Dla zachowania przejrzystości przy odwoływaniu się do obu pozycji stosowane są skrócone wersje tytułów, odpowiednio Zapytania T-SQL oraz Programowanie T-SQL (przyp. red.). xvi ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== artykuły; Twoje poglądy na temat możliwości programowania SQL Server są zawsze interesujące i na czasie. Podziękowania dla Cesara Galindo-Legaria. Czuję się zaszczycony, że zgodziłeś się napisać przedmowę do książki Zapytania T-SQL. Zaprojektowany przez Ciebie zespół optymalizator SQL Server jest po prostu rewelacyjny. Nadal staram się zrozumieć jego działanie i za każdym razem, gdy uda mi się rozwikłać kolejny fragment zagadki, jestem zachwycony możliwościami tego oprogramowania. Twoja głęboka wiedza, miłe usposo- bienie i skromność stanowią dla mnie inspirację. Podziękowania dla pracowników wydawnictwa Microsoft Press, a w szczególności koordynatora produktu Kena Jonesa. Jestem ci wdzięczny za personalne podejście, bardzo lubię nasze Guinnessowe sesje. Zadanie pogodzenia potrzeb wszystkich osób wydawało mi się niewykonalne, ale tobie jakoś udało się osiągnąć ten cel. Podziękowania dla redaktora nadzorującego Sally Stickney za umożliwienie realiza- cji tego projektu. Wiem, że książka Zapytania T-SQL była Twoim ostatnim projektem w wydawnictwie Microsoft Press przed rozpoczęciem nowej kariery i tym bardziej mam nadzieję, że miło wspominasz to doświadczenie. Życzę powodzenia na nowej drodze. Podziękowania dla redaktorki projektu Denise Bankaitis, która prawdopodobnie poświęciła tej serii książek więcej czasu niż jakikolwiek inny pracownik Microsoft Press. Dziękuję za efektywne zarządzanie projektem i zapewnienie sprawnej realizacji zadań. Praca z Tobą była przyjemnością. Chciałbym również podziękować menedżerom projektu DeAnn Montoya oraz Ashley Schneider z zespołu redakcyjnego S4Carlisle, a także redaktorce Becke McKay. Wiem, że poświęciłyście naszym tekstom wiele godzin, doceniam to. Podziękowania dla Solid Quality Mentors – praca w tak rewelacyjnej fi rmie i gru- pie ludzi to najwspanialsze doświadczenie w mojej dotychczasowej karierze. Czuję się tak, jakby wszystkie działania podejmowane w życiu zawodowym doprowadziły mnie do tego wspaniałego miejsca, w którym mogę zrealizować swoje powołanie, ucząc technologii SQL. Fernando Guerrero, Brianie Moran, Douglasie McDowell – to Waszej pracy fi rma zawdzięcza swój rozwój i sukces, możecie być z siebie dumni. Praca w Solid Quality Mentors zapewnia mi poczucie satysfakcji oraz radości, że mogę przebywać w grupie przyjaciół, którym ufam i których szanuję. Podziękowania dla kolegów z fi rmy: Rona Talmage, Andrew J. Kelly, Eladio Rincón, Dejana Sarka, Herberta Albert, Fritzai Lechnitz, Gianluca Hotz, Erika Veerman, Jay Hackney, Daniela Seara, Davida Mauri, Andrei Benedetti, Miguela Egea, Adolfa Wier- nik, Javiera Loria, Rushabha Mehta, Grega Low, Petera Myers, Randiego Dyess i wielu innych. Dziękuję Jeanne Reeves oraz Glen McCoin za umożliwienie realizacji szkoleń oraz całemu zespołowi za wsparcie. Chciałbym także podziękować Kathy Blomstrom za zarządzanie naszymi projektami oraz doskonałą redakcję. Wyrazy wdzięczności dla zespołu ds. rozwoju SQL Server, który jest odpowiedzial- ny za implementację i optymalizację języka T-SQL: Michaela Wang, Michaeala Rys, Erica Hanson, Umachandara Jayachandran (UC), Tobiasa Thernström, Jima Hogg, Isa- aca Kunen, Krzysztofa Kozielczyka, Cesara Galindo-Legaria, Craiga Freedman, Conora Cunningham, Yavora Angelov, Susan Price i wielu innych. Jesteśmy poniekąd skazani ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Podziękowania xvii na używanie owoców Waszej pracy i jak dotąd efekty są rewelacyjne! Aczkolwiek ostrze- gam, że nie damy Wam spokoju, dopóki nie otrzymamy pełnej implementacji klauzuli OVER. Chciałbym podziękować także Dubiemu Lebelowi oraz Assafowi Fraenkelowi z izra- elskiego oddziału Microsoft oraz Amiemu Levinowi za pomoc w nadzorowaniu pracy izraelskiej grupy użytkowników SQL Server. Podziękowania dla zespołu SQL Server Magazine: Megan Bearly, Sheili Molnar, Mary Waterloo, Michele Crockett, Mika Otey, Lavon Peters, Anne Grubb – możliwość współ- tworzenia tak wspaniałego czasopisma to dla mnie ogromny zaszczyt. Gratulacje z oka- zji dziesięciolecia magazynu! Trudno uwierzyć, że to już 10 lat – czas płynie tak szybko, gdy dobrze się bawimy. Dziękuję kolegom SQL Server MVP: Erlandowi Sommarskog, Alejandro Mesa, Aaro- nowi Bertrand, Tiborowi Karaszi, Stevowi Kass, Dejanowi Sarka, Royowi Harvey, Tonie- mu Rogerson, Marcello Poletti (Marc), Paulowi Randall, Bobowi Beauchemin, Adamowi Machanic, Simonowi Sabin, Tomowi Moreau, Hugonowi Kornelis, Davidowi Portas, Davidowi Guzman, Paulowi Nielsen i wielu innym: Wasz wkład w działanie społecz- ności SQL Server jest nieoceniony. Nasze dyskusje oraz wymiany poglądów pozwoliły mi zdobyć wiele cennych informacji. Podziękowania dla kolegów SQL Server MCT: Tibora Karaszi, Chrisa Randall, Teda Malone i innym. Nasza współpraca trwa już bardzo długo i cieszę się, że nadal należy- cie do grupy szkoleniowców SQL. Łączy nas zamiłowanie do nauczania. Wy najlepiej rozumiecie, jaką satysfakcję może przynosić przekazywanie wiedzy. Podziękowania dla moich studentów – bez Was moja praca nie miałaby sensu. Nauczanie jest moim powołaniem i celem, który przyświeca praktycznie całej mojej działalności związanej z technologią SQL, także pisaniu książek. Wasze pytania inspi- rują mnie do odnajdowania odpowiedzi, a zatem w dużym stopniu Wam zawdzięczam swoją wiedzę. Podziękowania dla moich rodziców Emilii i Gabriela Ben-Gan oraz rodzeństwa Iny Aviram i Michaela Ben-Gan za nieustające wsparcie. To nie przypadek, że większość z nas wybrała zawód nauczyciela, aczkolwiek realizacja powołania wymaga ode mnie częstych podróży. Brakuje mi Was, gdy jestem daleko i z utęsknieniem czekam na nasze spotkanie. Lilach, to Ty musisz wytrzymywać ze mną cały czas i wysłuchiwać moich pomysłów dotyczących SQL. To niczym pranie mózgu – w końcu zaczniesz zadawać dodatkowe pytania i zanim się obejrzysz, będziesz nawet czytać moje książki. Oczywiście z własnej nieprzymuszonej woli. Przynajmniej taki jest plan… Dziękuję za nadanie znaczenia mojemu życiu i za wspieranie mnie w trudnych momentach towarzyszących tworzeniu książek. xviii Podziękowania ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wprowadzenie N iniejsza książka – wraz z należącą do tej samej serii książką Microsoft SQL Server 2008 od środka: Zapytania w języku T-SQL – prezentuje zaawansowane metody defi - niowania i optymalizowania zapytań T-SQL oraz programowania w systemie Microsoft SQL Server 2008. Zostały one napisane z myślą o doświadczonych programistach i administratorach baz danych, którzy zajmują się tworzeniem oraz optymalizowaniem kodu w SQL Server 2008. Dla uproszczenia wspomniane publikacje będą nazywane w skrócie Zapytania T-SQL oraz Programowanie T-SQL lub prostu te książki. Osoby, które przeczytały wcześniejszą edycję książek poświęconą wersji SQL Server 2005, mogą odnaleźć w tym wydaniu omówienie wielu nowych zagadnień, funkcji i udoskonaleń wprowadzonych w wersji SQL Server 2008, a także uaktualnione i wzbo- gacone omówienie starszej funkcjonalności. Te książki koncentrują się na praktycznych, często spotykanych problemach i pre- zentują różne metody radzenia sobie z nimi. Przedstawionych zostanie wiele udoskona- lonych technik, które umożliwią specjalistom IT stosowanie naturalnych i efektywnych rozwiązań. Te książki prezentują możliwości tworzenia zapytań bazujących na zbiorach, a następnie objaśniają, na czym polega przewaga tej techniki nad proceduralnym pro- gramowaniem z wykorzystaniem kursorów. Jednocześnie uczą rozpoznawać te nieliczne sytuacje, w których lepiej jest zastosować to drugie podejście. Wcześniejsza książka z tej serii zatytułowana Zapytania T-SQL koncentruje się na defi - niowaniu i optymalizowaniu zapytań bazujących na zbiorach i autorzy tej publikacji zalecają uprzednie zapoznanie się z nią. Książka Programowanie T-SQL koncentruje się na programowaniu proceduralnym i bazuje na założeniu, że czytelnik posiadł umiejęt- ność tworzenia zapytań. Pięć pierwszych rozdziałów książki Zapytania T-SQL stanowi wprowadzenie do tema- tu logicznego oraz fi zycznego przetwarzania. Wiedza ta pozwala czerpać maksymalne korzyści z informacji prezentowanych w pozostałych częściach obu książek. Pierwszy rozdział jest poświecony logicznemu przetwarzaniu zapytań. Dokładnie opisuje logiczne fazy tego procesu, unikalne aspekty defi niowania zapytań SQL oraz specjalny sposób myślenia, który trzeba zaadaptować, programując w relacyjnym śro- dowisku zorientowanym na zbiory. Drugi rozdział zawiera wprowadzenie do teorii zbiorów i logiki predykatów – mate- matycznych fi larów, na których bazuje model relacyjny. Opanowanie tych podstaw pomaga w zrozumieniu modelu i języka. Ten rozdział został napisany przez Steve- na Kassa, który pełnił również rolę głównego recenzenta technicznego obu książek. Steve dysponuje unikatowym połączeniem talentu matematycznego, informatycznego, SQL oraz literackiego, co uczyniło zeń idealnego kandydata do zaprezentowania tego zagadnienia. Trzeci rozdział prezentuje model relacyjny. Zrozumienie modelu relacyjnego jest niezbędne do odpowiedniego projektowania baz danych i pomaga w pisaniu dobrego ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xix kodu. W tym rozdziale zdefi niowane zostaną takie pojęcia z zakresu algebry relacyjnej, jak relacje, krotki i operatory. Następnie model relacyjny zostanie przedstawiony z innej perspektywy nazywanej rachunkiem relacyjnym. To podejście w większym stopniu przy- pomina podejście biznesowe, ponieważ model logiczny jest opisywany w kategorii pre- dykatów i propozycji. W systemach transakcyjnych ogromne znaczenie ma integralność danych, dlatego duża część rozdziału poświęcona jest opisowi różnego typu więzów integralności. W końcowej części rozdziału omówiona zostanie normalizacja – formalny proces udoskonalania projektu bazy danych. Ten rozdział został napisany przez Dejana Sarka, który jest wiodącym specjalistą w zakresie modelu relacyjnego. Czwarty rozdział poświęcony jest optymalizacji zapytań. Opisuje metodologię dosto- sowywania zapytań, która została opracowana przez Solid Quality Mentors i jest sto- sowana w systemach produkcyjnych wdrażanych przez fi rmę. W tym rozdziale opisa- ne zostaną również metody stosowania indeksów i analizowania planów wykonania. Ponadto zaprezentowane zostaną najważniejsze informacje, które pozwolą zrozumieć przykłady prezentowane w pozostałych rozdziałach obu książek. Indeksy oraz plany zapytań stanowią ważne aspekty defi niowania i optymalizowania zapytań. Piąty rozdział, również napisany przez Steva Kass, zawiera omówienie złożonych koncepcji oraz algorytmów. W centrum uwagi znajdą się wybrane algorytmy często stosowane przez aparat SQL Server. Przedstawione zostaną najczarniejsze scenariusze, jak również mniej skomplikowane problemy. Poznanie złożonych algorytmów wyko- rzystywanych przez aparat baz danych pomaga w przewidzeniu m.in. w jaki sposób dodawanie danych do tabel wpływać będzie na wydajność określonych zapytań. Lepsze zrozumienie sposobu przetwarzania zapytań przez aparat SQL Server pomaga w ich optymalizowaniu. Kolejne rozdziały prezentują zaawansowane metody defi niowania i optymalizowania zapytań, z uwzględnieniem zarówno aspektów logicznych, jak i fi zycznych. Omówione zostaną następujące zagadnienia: zapytania podrzędne, wyrażenia tabelaryczne i funkcje szeregujące, złączenia i operacje na zbiorach, agregacje i przestawianie danych, opcje TOP i APPLY, modyfi kacje danych, wykonywanie zapytań na partycjonowanych tabe- lach, a także grafy, drzewa, hierarchie oraz zapytania rekurencyjne. Rozdział poświęcony wykonywaniu zapytań na partycjonowanych tabelach został napisany przez Lubora Kollara. Lubor kierował początkową fazą rozwoju tabel oraz indeksów partycjonowanych. Jego pracy zawdzięczamy wiele dostępnych obecnie funk- cji. Aktualnie Lubor należy do zespołu SQL Server Customer Advisory Team (SQL CAT) i często zdarza mu się doradzać klientom, którzy posiadają duże implementacje partycjonowanych tabel oraz indeksów. Dodatek A zawiera zagadki logiczne. W tej części czytelnicy mają okazję popra- wić umiejętność myślenia logicznego przez rozwiązywanie łamigłówek. Instrukcje SQL zasadniczo bazują na logice. W związku z tym rozwijanie umiejętności logicznego myśle- nia pomaga w rozwiązywaniu problemów związanych z pisaniem zapytań. Co więcej, wspólne rozwiązywanie zagadek może być rozrywką dla całej rodziny. Zaprezentowa- ne łamigłówki stanowią zestawienie zagadek logicznych, które publikowałem w serii artykułów poświęconych T-SQL w SQL Server Magazine. Chciałbym podziękować SQL Server Magazine za zgodę na udostępnienie tych zagadek czytelnikom książki. xx Wprowadzenie ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Książka Programowanie T-SQL koncentruje się na programistycznych konstrukcjach T-SQL i rozszerza opis o technologie XML oraz XQuery, a także integrację CLR. Omó- wione zostaną następujące zagadnienia: widoki, defi niowane przez użytkowników funk- cje, procedury składowane, wyzwalacze, transakcje i współbieżność, obsługa wyjątków, tabele tymczasowe i zmienne tabelaryczne, kursory, dynamiczne instrukcje SQL, obsłu- ga danych typu Data i godzina, defi niowane przez użytkowników typy CLR, wsparcie dla danych tymczasowych w modelu relacyjnym, XML oraz XQuery (łącznie z otwartym schematem), dane przestrzenne, śledzenie dostępu i modyfi kacji danych oraz funkcja Service Broker. Rozdziały zawierające omówienie defi niowanych przez użytkownika typów CLR, wsparcia dla danych tymczasowych w modelu relacyjnym, XML oraz XQuery zosta- ły napisane przez Dejana Sarka. Jak wspomniałem, Dejan posiada ogromną wiedzę o modelu relacyjnym i ciekawe spostrzeżenia na temat samego modelu oraz możliwości stosowania konstrukcji prezentowanych w tym rozdziale. Rozdział poświęcony danym przestrzennym został napisany przez Eda Katibaha oraz Isaaca Kunena. Ed oraz Isaac należą do zespołu programistycznego SQL Server i kie- rowali implementacją obsługi danych przestrzennych w SQL Server 2008. To dla mnie ogromny zaszczyt, że projektanci funkcji zgodzili się napisać poświęcony jej rozdział. Wsparcie dla danych przestrzennych stanowi nowość w SQL Server 2008 i wiąże się z wprowadzeniem nowych typów danych, metod oraz indeksów. Ten rozdział nie pre- tenduje do miana kompleksowego omówienia danych przestrzennych ani encyklopedii wszystkich metod przestrzennych, które są obecnie wspierane przez SQL Server. Pełni rolę wprowadzenia do podstawowych koncepcji przestrzennych i prezentuje kluczo- we konstrukcje programistyczne niezbędne do pomyślnego stosowania nowej funkcji w SQL
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Microsoft SQL Server 2008 od środka Programowanie w języku T-SQL
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: