Czy konieczne jest użycie znaku # do tworzenia tabel tymczasowych na serwerze SQL?


91

Czy konieczne jest użycie #przed utworzeniem tabeli tymczasowej na serwerze SQL?

Przykład:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Czy w przypadku ItemBack1 konieczne jest użycie #symbolu?

Jeśli nie, to jaki jest pożytek z #tworzenia tabel tymczasowych?


3
Tak. # tworzy tabelę tymczasową. Bez tego tworzy stół.
Jeow Li Huan

Odpowiedzi:


151

Tak. Aby utworzyć tabele tymczasowe, musisz poprzedzić nazwę tabeli znakiem „#” (hash).

Jeśli NIE potrzebujesz tej tabeli później, możesz ją utworzyć. Tabele tymczasowe są bardzo podobne do zwykłych tabel. Jednak zostanie utworzony w tempdb. Jest również dostępny tylko przez bieżącą sesję, np. Dla EG: jeśli inny użytkownik spróbuje uzyskać dostęp do utworzonej przez Ciebie tabeli tymczasowej, nie będzie mógł tego zrobić.

„##” (podwójny hash tworzy „Globalną” tabelę tymczasową, do której można uzyskać dostęp również z innych sesji.

Skorzystaj z poniższego łącza, aby uzyskać informacje o podstawach tabel tymczasowych: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Jeśli zawartość Twojej tabeli jest mniejsza niż 5000 wierszy i NIE zawiera typów danych, takich jak nvarchar (MAX), varbinary (MAX), rozważ użycie zmiennych tabeli.

Są najszybsze, ponieważ są takie same jak wszystkie inne zmienne przechowywane w pamięci RAM. Są również przechowywane w tempdb, a nie w pamięci RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Więcej informacji o zmiennych tabeli: http://odetocode.com/articles/365.aspx


11
W SQL Server składnia SELECT to INSERT INTO @ ItemBack1 SELECT kolumna1, kolumna2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384

8
Tabele zmiennych nie są przechowywane w pamięci RAM, są również przechowywane w tempdb. Zalecałbym nie używać zmiennych tabeli, chyba że rozumiesz niektóre z ich wad, ponieważ ich liczby wierszy są automatycznie ustawiane na jeden, co może skutkować złymi planami.
ConstantineK

Czy możesz podać źródło dla ograniczeń 5000 wierszy, nvarchar (max), varbinary (max)? Jest to dozwolone, ale nie wiem, dlaczego nie jest to zalecane.
Brad,

1
Też myślałem, że zmienne tabeli są przechowywane w pamięci. Stoję poprawione: dba.stackexchange.com/a/16386/23720
Baodad

1
Chcę tylko skomentować, że faktem jest, że zmienne tabeli są przechowywane w tempdb. Komentuję, więc może WIĘCEJ ludzi czyta komentarze i wtrąca się tam do głowy, ponieważ jestem tak zmęczony chodzeniem do jointa jako starszy konsultant, że muszę kłócić się z pracownikiem na pełny etat, który jest ignorantem i próbuje powiedzieć inaczej. Mówię o dziesiątkach firm z listy Fortune 500, więc cieszę się, że ludzie komentują. SZCZĘŚCIE, chyba że ten OP, który odpowiada na pytanie, faktycznie EDYTUJE ich odpowiedź, będziemy nadal mieć tego ignoranta, który będzie trwał przez następną dekadę.
Tom Stickel

14

Różnica między dwiema tabelami ItemBack1i #ItemBack1jest to, że najpierw na to trwałe (stałe), gdzie jako druga ma charakter tymczasowy.

A teraz spójrz ponownie na swoje pytanie

Czy konieczne jest użycie znaku # do tworzenia tabeli tymczasowej na serwerze sql?

Odpowiedź brzmi: tak , ponieważ bez tego poprzedzającego #tabela nie będzie tabelą tymczasową, będzie niezależna od wszystkich sesji i zakresów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.