Jaka jest różnica między tabelą @, tabelą # i tabelą ## w SQL Server?
sql-server
Craig Schwarze
źródło
źródło
Spójrz na
źródło
#
a##
tabele to rzeczywiste tabele reprezentowane w tymczasowej bazie danych. Tabele te mogą mieć indeksy i statystyki i można uzyskać do nich dostęp poprzez sprocs w sesji (w przypadku globalnej tabeli tymczasowej jest ona dostępna między sesjami).@Table to zmienna tabeli.
Więcej: http://www.sqlteam.com/article/temporary-tables
źródło
Skupiłbym się na różnicach między #table i @table. ## table jest globalną tabelą tymczasową i przez ponad 10 lat używania SQL Server nie znalazłem jeszcze ważnego przypadku użycia. Jestem pewien, że niektóre istnieją, ale natura obiektu sprawia, że jest on wysoce bezużyteczny IMHO.
Odpowiedź na @whiner autorstwa @marc_s jest absolutnie prawdziwa: rozpowszechnionym mitem jest to, że zmienne tabeli zawsze żyją w pamięci. W rzeczywistości dość często zmienna tabeli trafia na dysk i działa podobnie jak tabela tymczasowa.
W każdym razie proponuję zapoznać się z zestawem różnic, podążając za linkami wskazanymi przez @Astander. Większość różnic dotyczy ograniczeń dotyczących tego, czego nie można zrobić ze zmiennymi @table.
źródło
CREATE TABLE #t
Tworzy tabelę, która jest widoczna tylko w czasie tego POŁĄCZENIA i podczas tego POŁĄCZENIA ten sam użytkownik, który tworzy inne połączenie, nie będzie mógł zobaczyć tabeli #t z innego połączenia.
CREATE TABLE ##t
Tworzy tymczasową tabelę widoczną dla innych połączeń. Ale tabela jest usuwana po zakończeniu tworzenia połączenia.
źródło
SqlConnection.Open()
z tymi samymi parametrami połączenia jest to samo POŁĄCZENIE ?jeśli potrzebujesz unikalnej globalnej tabeli tymczasowej, stwórz własną z przedrostkiem / sufiksem Uniqueidentifier i porzuć wykonanie po wykonaniu if object_id (.... Jedyną wadą jest użycie Dynamic sql i musisz jawnie upuścić.
źródło