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;
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;
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.
Komentarze (0)
Brak komentarzy...