Programowanie obiektów lokalne tabele tymczasowe, globalne tabele tymczasowe, zmienne lokalne, zmienne globalne przypisane wartości zmiennym 1
T-SQL Transact SQL (T-SQL), tak jak inne języki programoawania posiada mechanizm tworzenia procedur. Cechy procedur: tworzenie obiektów tymczasowych, przekazywanie określonych wartości do i z procedur. 2
Tabela tymczasowa Tabela tymczasowa zbudowana jest tak samo jak zwykła tabela, ale jest ona automatycznie usuwana po zakończeniu pracy z SQL Serverem. Tworzenie tabel tymczasowych z punktu widzenia zasobów Servera jest bardzo kosztowne. Tworzenie tabele tymczasowych polecenie CREATE TABLE lub SELECT INTO. Nazwa tabeli jest poprzedzona znakiem # (tabela lokalna) lub ## (tabela globalna). W poleceniu tabeli tymczasowej nie można używać klauzuli definiującej klucze obce (FOREGIN KEY) pozostałe klauzule łącznie z CHECK są dostępne. Tabelę tymczasowa można usunąć tylko poleceniem DROPE TABELE wykonanym z poziomu połączenia tworzącego. Lokalizacja tabeli tymczasowej tempdb - w systemowej bazie danych 3
Tabela tymczasowa Przykład tworzenia lokalnej tabeli tymczasowej. CREATE TABLE #TabTymcz (Klucz INT PRIMARY KEY, Wartość CHAR (20)) Lokalne tabele tymczasowe widoczne są tylko w połączeniu w którym je utworzono. Do globalnych tabel tymczasowych mają dostęp wszyscy użytkownicy, ale tylko tak długo jak długo połączony jest z SQL Serwerem jej twórca. 4
Tabele tymczasowe Wstaw do relacji #TabTymcz wiersz klucz=1, wartość = wartość pierwsza. Wyświetl zawartość tabeli #TabTymcz. Przykład Utwórz lokalną tabelę tymczasową w której będą przepisane wartość (nazwaolejku, nazwalacinska,idolejku) z relacji olejki. SELECT INTO FROM NazwaOlejku, NazwaLacinska,idolejku #TabelaLokalna Olejki Wyświetl zawartość relacji TabelaLokalna 5
Przykład Tabele tymczasowe Utwórz tabelę globalną o nazwie TabelaGlobalna...(w miejsce kropek wpisz numer komputera) do której z tabeli olejki przepisz nazwaolejki, nazwalacinska. SELECT INTO FROM NazwaOlejku, NazwaLacinska ##TabelaGlobalna Olejki 6
Zmienne Zmienne są identyfikowane za pomocą przyrostka @ - zmienne lokalne i @@ - zmienne globalne. Zmienne lokalne są definiowane przez użytkownika, zmienne globalne stanowią część środowiska programu SQL Server i nie mogą być tworzone przez użytkowników. Składnia instrukcji DECLARE DECLARE @zmienna_lokalna 1 typ_danych,..., zmienna_lokalna n typ_danych Typem danych nie może być txte, ntext, image. DECLARE @zmienna_lokalna TABLE ((definicja_tabeli)) Definicja_tabeli jest identyczna z CREATE TABLE, ale nie mogą w niej występować ograniczenia PRIMARY KEY, UNIQUE KEY, NULL, CHECK 7
Zmienne lokalne Początkową wartością zmiennej lokalnej jest NULL. Przypisanie wartości zmiennej: poleceniem SET z wartością stałą lub wyrażeniem, DECLARE @limit numeric (19,2) SET @limit = 35 SELECT * FROM olejkiceny WHERE cena>@limit poleceniem SELECT z wartością stałą lub wyrażeniem, DECLARE @cena_min numeric (19,2),--deklaracja zmiennych @cena_max numeric (19,2) SELECT @cena_min=min(cena), @cena_max=max(cena) FROM olejkiceny --przypisanie wartości SELECT @cena_min as min, @cena_max as max --zwrócenie jako zestwa wynikowy 8
Zmienne lokalne poleceniem INSERT INTO ze zmienną typu tabelowego -- Utworzenie zmiennej lokalnej typu tabelowego DECLARE@lokalnaTab TABLE (NazwaOlejku char(50), NazwaLacinska char(50)) -- Utworzenie wierszy za pomocą instrukcji INSERT INSERT INTO @lokalnatab SELECT NazwaOlejku, NazwaLacinska FROM Olejki -- Wyświetlenie wyników SELECT NazwaOlejku, NazwaLacinska FROM @lokalnatab 9
Zmienne globalne Zmienne globalne możemy podzielić na grupy obejmujące funkcje: 1. specyficzne dla połączenia, 2. monitorujące, 3. konfigurujące. 10
Funkcje specyficzne dla połączenia N a z w a f u n k c ji W a r t o ść zw racana @ @ C U R S O R _ R O W S L ic z b a w ie r s z y w y p e ł n ia ją cych ostatni otw arty k u r s o r d la o k r e ś lo n e g o p o łą c z e n ia @ @ D A T E F I R S T P ie r w s z y d z ie ń t y g o d n ia ( 7 - n ie d z ie la, 1 - p o n ie d z ia ł e k ) u s t a w io n y p o le c e n ie m S E T O A T E F I R S T. @ @ D A T E F I R S T K o d b łę d u w y g e n e r o w a n y p r z e z o s t a t n ie w y k o n a n e w s e s ji p o le c e n ie. U ż y w a n a d o k o n t r o li b łę d ó w w p r o c e d u r a c h, w s a d a c h i w y z w a la c z a c h. S t a t u s o s t a t n ie j o p e r a c ji p o b r a n ia r e k o r d u z k u r s o r a @ @ F E T C H _ S T A T U S w o t w a r t e j s e s ji. @ @ I D E N T I T Y @ @ L O C K _ T I M E O U T W a r t o ść id e n t it y w y g e n e r o w a n a d la o s t a t n ie g o d o d a n e g o d o t a b e li r e k o r d u w b ie żącej sesji. Inform ację o o s ta tn ie j w a rto ś ci d o d a n e j w d o w o ln e j s e s ji z w r a c a f u n k c ja I D E N T _ C U R E N T ( ' n a z w a _ t a b e li ' ). A k t u a ln y p o z io m z a g n ie ż d ż e n ia t r a n s a k c ji I d e n t y f ik a t o r ję z y k a a k t u a ln ie u ż y w a n e g o p r z e z @ @ L A N G I D p o łą czenie A k t u a ln y p o z io m z a g n ie ż d ż e n ia p r o c e d u r y z a p a m ię t a n e j lu b w y z w a la c z a. W a ż n e je s t je g o @ @ N E S T L E V E L k o n t r o lo w a n ie p r z y w y w o ł a n ia c h r e k u r s y w n y c h, k t ó r y c h p o z io m n ie m o ż e przekroczyć w a r t o ś ci m a k s y m a ln e j 3 2. @ @ P R O C I D I d e n t y f ik a t o r a k t u a ln ie w y k o n y w a n e j p r o c e d u r y. N a z w a z d a ln e g o s e r w e r a, n a k t ó r y m u r u c h o m io n o @ @ R E M S E R V E R z d a ln ą p r o c e d u r ę. @ @ R O W C O U N T @ @ P I D @ @ T E X T S I Z E @ @ T R A N C O U N T L ic z b a r e k o r d ó w, n a k t ó r y c h o p e r o w a ł o o s t a t n ie p o le c e n ie s e s ji ( p r z e c z y t a n y c h lu b zm odyfikow anych). I d e n t y f ik a t o r a k t u a ln e g o p o łą c z e n ia. M a k s y m a ln a lic z b a b a jt ó w z w r ó c o n y c h p r z e z in s tru k c ję S E L E C T w c z a s ie c z y t a n ia d a n y c h t y p u t e x t lu b im a g e ( u s t a w io n a p o le c e n ie m S E T T E X T S IlE ). A p lik a c ja k lie n ta m o ż e ją z m n ie js z y ć. A k t u a ln y p o z io m z a g n ie ż d ż e n ia t r a n s a k c ji. 11
Nazwa funkcji @@CONNECTIONS @@CPU_BUSY Funkcje monitorujące Wartość zwracana Liczba prób logowania od ostatniego restartu SQL Servera. Liczba jednostek czasu (aktualnie 1/100 s) pracy CPU od ostatniego restartu SQL Servera. @@ IDLE Liczba jednostek czasu (aktualnie 1/100 s) bezczynności CPU od ostatniego restartu SQL Servera. @@IO_BUSY @@PACK_RECEIVED @@PACK SENT @@PACKET_ERRORS @@TOTAL_ERRORS @@TOTAL_READ @@TOTAL_WRITE Liczba jednostek czasu (aktualnie 1/100 s), w których prowadzone były operacje wejściawyjścia, od ostatniego restartu SQL Servera. Liczba odebranych pakietów od ostatniego restartu SQL Servera Liczba wysłanych pakietów od ostatniego restartu SQL Servera. Liczba błędów w czasie wysyłania pakietów od ostatniego restartu SQL Servera Liczba błędów w czasie odbierania pakietów od ostatniego restartu SQL Servera Liczba odczytów z dysku od ostatniego restartu SQL Servera. Liczba zapisów na dysku od ostatniego restartu SQL Servera. 12
Funkcje konfigurujące Nazwa funkcji @@OBTS[ms6] @@MAX_CONECTIONS @@MAX_PRECISION @@MICROSOFTVERSION @@PROCID ID @@SERVERNAME @@SERVICENAME @ @ TIMETICKS @@VERSION Wartość zawracana Wartość ostatniego użytego znacznika czasowego dla aktualnej bazy danych. Nowa wartość jest generowana po dodaniu wiersza do tabeli zawierającej pole tego typu. Maksymalna liczba połączeń użytkowników możliwa do obsłużenia. Nie musi odpowiadać aktualnej wartości tego parametru. Maksymalny poziom precyzji dla typów numerycznych i dziesiętnych. Wewnętrzny numer wersji Microsoft. ID aktualnie wykonywanej procedury zapamiętanej. Nazwa SQL Servera. Powinna odpowiadać nazwie komputera. Jeżeli jednak jej nie odpowiada, można usunąć błędną nazwę serwera, uruchamiając sp _dropserver, po czym dodać nową, korzystając z sp _addserver. Nazwa klucza rejestru, pod którym uruchomiono SQL Server. Zwraca MSSQLServer, jeżeli bieżąca instancja jest instancją domyślną; lub nazwę aktualnie użytkowanej instancji jako instancji nazwanej. Liczba mikrosekund na jednostkę czasową. Numer wersji SQL Servera. 13
Zmienne globalne Przykład SELECT @@SERVERNAME as 'Nazwa', @@VERSION as 'Wersja', @@LANGUAGE as 'Język' 14