Blog JSystems - z miłości do programowania

Szukaj

Tabele tymczasowe w MS SQL Server

Pojęcie tabeli tymczasowej jest nierozerwalnie związane z pojęciem sesji. Wystarczy spojrzeć do narzędzia SQL Server Management Studio (SSMS), aby stwierdzić, że każde zapytanie otwarte w nowym oknie rozpoczyna nową sesję, czyli nowe połączenie do SQL Server. Aplikacje mogą korzystać z wielu sesji podczas pobierania czy manipulacji danymi w SQL Server, mogą również dzielić jedno aktywne połączenie z innymi programami. Możliwa jest również taka komunikacja, w której każde zapytanie otwiera połączenie i natychmiast je zamyka po otrzymaniu wyniku. Tworzymy ją w ten sam sposób co zwykłe tabele lub poprzez polecenie into (możemy je wykorzystać również wobec zwykłych tabel).


select ID, NazwaKraju into #tab from SalesLT.KrajPochodzenia;


119.png (718×140)


SQL Server pozwala na utworzenie dwóch rodzajów tabel tymczasowych:


- lokalnych, których nazwa jest poprzedzona prefiksem #


- globalnych, których nazwa jest poprzedzona prefiksem ##


Obydwa rodzaje tabel tymczasowych tworzone są fizycznie w bazie danych tempdb. Lokalne tabele tymczasowe są widoczne w ramach jednego połączenia, czyli sesji. Można je uznać za prywatne i widoczne tylko dla nas. Należy pamiętać, że nazwa tabeli tymczasowej – lokalnej czy globalnej – jest ograniczona do 116 znaków, zamiast 128 jak w przypadku tabel użytkownika. Jest to związane z procesem tworzenia tabel tymczasowych. Silnik baz danych musi mieć możliwość identyfikacji każdego obiektu, a tabele tymczasowe istniejące w wielu połączeniach mogą mieć takie same nazwy. Z tego względu SQL Server dokleja wewnętrzny numer (jako sufiks) do każdej nazwy tabeli tymczasowej. W efekcie wygląda to tak, że po utworzeniu tabel o takich samych nazwach w różnych połączeniach:


select name from sys.tables;


120.png (836×172)


Lokalne tabele tymczasowe od razu po ich utworzeniu i zostaną usunięte między innymi po:


- wywołaniu polecenia drop table


- zakończeniu sesji, w której zostały utworzone.


Globalne tabele tymczasowe (utworzone z przedrostkiem ##) mają większą widoczność, ponieważ są dostępne dla wszystkich sesji. Należy jednak zawsze sprawdzać, czy globalna tabela tymczasowa istnieje zanim zostanie utworzona ponownie, ponieważ w takim wypadku SQL Server zgłosi komunikat o błędzie. Globalna tabela tymczasowa również jest usuwana w momencie, kiedy sesja, w której została utworzona tabela tymczasowa, została zakończona i tabela nie posiada referencji (odwołań) w innych aktywnych sesjach.

Przyjdź do nas na szkolenie z baz danych SQL Server! Mamy szereg szkoleń w ofercie: SQL, T-SQL, tuning, administracja i wiele innych. Sprawdź dostępne szkolenia SQL Server
Zapisz się do newslettera aby otrzymywać najnowsze świeżynki pojawiające się na blogu! Zapisz się do newslettera