W SQL Server tabela tymczasowa jest pewnym rodzajem tabeli, która istnieje, dopóki nie wyjdzie poza zakres (chyba że została wyraźnie usunięta).
Różni się to od zwykłej (trwałej) tabeli, w której zwykła tabela istnieje na stałe w Twojej bazie danych, dopóki jej nie usuniesz.
Zalety tabel tymczasowych
Tabele tymczasowe mogą być przydatne, gdy trzeba uruchomić wiele zapytań względem podzbioru większego zestawu wyników. Możesz użyć SELECT... INTO
z WHERE
klauzula, aby umieścić podzbiór danych w tabeli tymczasowej. Następnie możesz uruchamiać zapytania względem tej tabeli tymczasowej. Dzięki temu nie musisz stale filtrować danych z większego zestawu wyników podczas wykonywania wielu zapytań.
Tabele tymczasowe mogą być również przydatne z perspektywy uprawnień. Jeśli musisz pracować z danymi z trwałej tabeli, ale nie masz wystarczających uprawnień do wykonywania wszystkich potrzebnych operacji, możesz skopiować te dane do tabeli tymczasowej (zakładając, że masz dostęp do odczytu) i zrobić wszystko, co musisz. .
Tabele tymczasowe mogą być również używane, jeśli nie masz uprawnień do tworzenia (trwałych) tabeli w bieżącej bazie danych.
Innym przydatnym aspektem tabel tymczasowych jest to, że można ich używać do uruchamiania szybkich zapytań ad-hoc podczas uruchamiania testu, demonstrowania koncepcji itp., nie martwiąc się o pozostawienie śladu trwałych tabel, które zapomniałeś usunąć.
TempDB
Tabele tymczasowe są tworzone w TempDB Baza danych. Jest to systemowa baza danych, która przechowuje tymczasowe obiekty użytkownika, takie jak tymczasowe tabele i indeksy, tymczasowe procedury składowane, zmienne tabel, tabele zwracane w funkcjach z wartościami przechowywanymi w tabeli oraz kursory. Przechowuje również wewnętrzne obiekty utworzone przez silnik bazy danych oraz magazyny wersji.
Każdy użytkownik może tworzyć tymczasowe tabele w TempDB . Nie musisz konfigurować żadnych specjalnych uprawnień dla TempDB dostęp.
Składnia
Tabele tymczasowe są tworzone przy użyciu tej samej składni, co zwykłe tabele. Różnica polega na tym, że tabele tymczasowe są poprzedzone jednym lub dwoma znakami liczbowymi (#
):
- Lokalne tabele tymczasowe są poprzedzone pojedynczym znakiem liczby (np.
#table_name
) - Globalne tabele tymczasowe są poprzedzone podwójnym znakiem liczby (np.
##table_name
)
Przykład tworzenia lokalnego tabela tymczasowa:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Przykład tworzenia globalnego tabela tymczasowa:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Lokalne tabele tymczasowe są widoczne tylko w bieżącej sesji, a globalne tabele tymczasowe są widoczne we wszystkich sesjach.
Jak długo trwa tabela tymczasowa?
Tabele tymczasowe są automatycznie usuwane, gdy wychodzą poza zakres.
Możesz także jawnie upuścić tabelę tymczasową, używając DROP TABLE
.
To, kiedy tabela tymczasowa jest automatycznie usuwana, zależy od tego, czy tabela tymczasowa jest lokalna, czy globalna oraz czy została utworzona w procedurze składowanej.
- Lokalne :Lokalna tabela tymczasowa utworzona w procedurze składowanej jest usuwana automatycznie po zakończeniu procedury składowanej. Do tabeli mogą odwoływać się dowolne zagnieżdżone procedury składowane wykonywane przez procedurę składowaną, która utworzyła tabelę. Do tabeli nie może odwoływać się proces, który wywołał procedurę składowaną, która utworzyła tabelę.
Wszystkie inne lokalne tabele tymczasowe są automatycznie usuwane na koniec bieżącej sesji.
- Globalny :Globalne tabele tymczasowe są automatycznie usuwane, gdy sesja, w której utworzono tabelę, kończy się i wszystkie inne zadania przestają się do nich odwoływać. Powiązanie między zadaniem a tabelą jest utrzymywane tylko przez okres istnienia pojedynczej instrukcji T-SQL. Oznacza to, że globalna tabela tymczasowa jest usuwana po zakończeniu ostatniej instrukcji T-SQL, która aktywnie odwoływała się do tabeli po zakończeniu sesji tworzenia.
Schemat
Wszystkie tabele tymczasowe są tworzone w dbo schemat. Jeśli wyraźnie określisz inny schemat, zostanie on zignorowany.
Klucze obce
W tabelach tymczasowych nie są wymuszane ograniczenia klucza OBCEGO. Jeśli określisz klucz obcy, tabela jest nadal tworzona, tylko bez klucza obcego. Zostanie zwrócona wiadomość informująca o tym.