Blog JSystems - uwalniamy wiedzę!

Szukaj

Tabela tymczasowa, w skrócie

Utworzenie i użycie tabeli #temp:

CREATE TABLE #temp (Id INT, Nazwa NVARCHAR(50));
INSERT INTO #temp VALUES (1, 'Test');
SELECT * FROM #temp;

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.

Baner szkolenia Kompleksowe SQL w Microsoft SQL Server w JSystems, terminy gwarantowane

Szkolenie Kompleksowe SQL w Microsoft SQL Server →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Czym jest tabela tymczasowa i z czym jest związana?
Tabela tymczasowa to tabela nierozerwalnie związana z pojęciem sesji, czyli połączenia do SQL Server. Tworzysz ją tak jak zwykłą tabelę albo poleceniem SELECT INTO, a fizycznie powstaje w bazie tempdb. Służy do przechowywania danych roboczych w ramach danej sesji lub połączeń.
Czym różni się tabela tymczasowa lokalna (#) od globalnej (##)?
Tabela lokalna z prefiksem # jest widoczna tylko w ramach jednego połączenia, czyli prywatna dla Twojej sesji. Tabela globalna z prefiksem ## jest dostępna dla wszystkich sesji. Obie powstają fizycznie w bazie tempdb, różni je jednak zakres widoczności.
Kiedy usuwana jest lokalna tabela tymczasowa?
Lokalna tabela tymczasowa znika po wywołaniu polecenia DROP TABLE lub po zakończeniu sesji, w której została utworzona. Nie musisz więc pamiętać o ręcznym sprzątaniu, jeśli tabela ma żyć tylko przez czas trwania danego połączenia.
Dlaczego nazwa tabeli tymczasowej jest ograniczona do 116 znaków?
Zamiast standardowych 128 znaków, tabela tymczasowa ma limit 116 znaków, ponieważ SQL Server dokleja do jej nazwy wewnętrzny numer jako sufiks. Dzięki temu tabele o takich samych nazwach mogą współistnieć w wielu połączeniach i pozostają możliwe do jednoznacznej identyfikacji.
Na co uważać przy globalnej tabeli tymczasowej?
Przed ponownym utworzeniem globalnej tabeli tymczasowej zawsze sprawdź, czy ona już nie istnieje, bo w przeciwnym razie SQL Server zgłosi błąd. Taka tabela jest usuwana, gdy sesja, która ją utworzyła, kończy się, a tabela nie ma już odwołań w innych aktywnych sesjach.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...