Jaka jest różnica między lokalnymi i globalnymi tabelami tymczasowymi w programie SQL Server?
sql-server
temp-tables
global-temp-tables
andrew Sullivan
źródło
źródło
Odpowiedzi:
Uważam, że to wyjaśnienie jest dość jasne (to czysta kopia od Technet ):
źródło
Zmienne tabeli (
DECLARE @t TABLE
) są widoczne tylko dla połączenia, które je tworzy, i są usuwane po zakończeniu procedury wsadowej lub procedury składowanej.Lokalne tabele tymczasowe (
CREATE TABLE #t
) są widoczne tylko dla połączenia, które je tworzy, i są usuwane po zamknięciu połączenia.Globalne tabele tymczasowe (
CREATE TABLE ##t
) są widoczne dla wszystkich i są usuwane po zamknięciu wszystkich połączeń, które się do nich odwoływały.Stałe tabele Tempdb (
USE tempdb CREATE TABLE t
) są widoczne dla wszystkich i są usuwane po ponownym uruchomieniu serwera.źródło
1.) Lokalna tabela tymczasowa istnieje tylko na czas trwania połączenia lub, jeśli została zdefiniowana w instrukcji złożonej, na czas trwania instrukcji złożonej.
2.) Globalna tabela tymczasowa pozostaje w bazie danych na stałe, ale wiersze istnieją tylko w ramach danego połączenia. Po zamknięciu połączenia dane w globalnej tabeli tymczasowej znikają. Jednak definicja tabeli pozostaje w bazie danych w celu uzyskania dostępu, gdy baza danych zostanie otwarta następnym razem.
źródło
Cytowanie z Books Online:
Lokalne tabele tymczasowe są widoczne tylko w bieżącej sesji; globalne tabele tymczasowe są widoczne dla wszystkich sesji.
Tabele tymczasowe są automatycznie usuwane, gdy wychodzą poza zakres, chyba że jawnie usuwane przy użyciu DROP TABLE:
źródło
Lokalne tabele tymczasowe : jeśli utworzysz lokalne tabele tymczasowe, a następnie otworzysz inne połączenie i spróbujesz wykonać zapytanie, pojawi się następujący błąd.
tabele tymczasowe są dostępne tylko w ramach sesji, która je utworzyła.
Globalne tabele tymczasowe : Czasami możesz chcieć utworzyć tabelę tymczasową, która będzie dostępna dla innych połączeń. W takim przypadku możesz użyć globalnych tabel tymczasowych.
Globalne tabele tymczasowe są niszczone tylko wtedy, gdy wszystkie sesje, które się do nich odnoszą, są zamknięte.
źródło
Warto wspomnieć, że istnieją również: globalne tabele tymczasowe o zasięgu bazy danych (obecnie obsługiwane tylko przez Azure SQL Database).
źródło
Nie widziałem żadnych odpowiedzi, które wskazują użytkownikom, gdzie możemy znaleźć tabelę Global Temp. Podczas nawigacji w ramach SSMS można wyświetlać lokalne i globalne tabele tymczasowe w tej samej lokalizacji. Poniższy zrzut ekranu pochodzi z tego linku .
Bazy danych -> Systemowe bazy danych -> tempdb -> Tabele tymczasowe
źródło