Muss # zum Erstellen von temporären Tabellen in SQL Server verwendet werden?

91

Ist es erforderlich, #vor dem Erstellen einer temporären Tabelle in SQL Server zu verwenden?

Beispiel:

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

Ist es für ItemBack1 erforderlich, das #Symbol zu verwenden?

Wenn nicht, wozu werden dann #temporäre Tabellen erstellt?

Arun CM
quelle
3
Ja. # erstellt eine temporäre Tabelle. Ohne es entsteht eine Tabelle.
Jeow Li Huan

Antworten:

151

Ja. Sie müssen dem Tabellennamen "#" (Hash) voranstellen, um temporäre Tabellen zu erstellen.

Wenn Sie die Tabelle später NICHT benötigen, erstellen Sie sie. Temporäre Tabellen sind normalen Tabellen sehr ähnlich. Es wird jedoch in tempdb erstellt. Außerdem ist der Zugriff nur über die aktuelle Sitzung möglich, dh für EG: Wenn ein anderer Benutzer versucht, auf die von Ihnen erstellte temporäre Tabelle zuzugreifen, kann er dies nicht tun.

"##" (Doppel-Hash erstellt eine "globale" temporäre Tabelle, auf die auch andere Sitzungen zugreifen können.

Unter dem folgenden Link finden Sie die Grundlagen für temporäre Tabellen: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Wenn der Inhalt Ihrer Tabelle weniger als 5000 Zeilen umfasst und KEINE Datentypen wie nvarchar (MAX), varbinary (MAX) enthält, sollten Sie die Verwendung von Tabellenvariablen in Betracht ziehen.

Sie sind die schnellsten, da sie genau wie alle anderen Variablen sind, die im RAM gespeichert sind. Sie werden auch in Tempdb gespeichert, nicht im 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;

Weitere Informationen zu Tabellenvariablen: http://odetocode.com/articles/365.aspx

mobiledaemon
quelle
11
In SQL Server lautet die SELECT-Syntax INSERT INTO @ ItemBack1 SELECT Spalte1, Spalte2, someInt, someVarChar FROM Tabelle2 WHERE table2.ID = 7
mhenry1384
8
Variablentabellen werden nicht im RAM gespeichert, sondern auch in Tempdb. Ich würde empfehlen, keine Tabellenvariablen zu verwenden, es sei denn, Sie verstehen einige ihrer Nachteile, da ihre Zeilenanzahl automatisch auf eins gesetzt wird und schlechte Pläne resultieren können.
ConstantineK
Können Sie eine Quelle für die Einschränkungen für 5000 Zeilen, nvarchar (max) und varbinary (max) angeben? Dies ist erlaubt, aber ich bin mir nicht sicher, warum es nicht empfohlen wird.
Brad
1
Ich dachte auch, dass Tabellenvariablen im Speicher gespeichert sind. Ich stehe korrigiert: dba.stackexchange.com/a/16386/23720
Baodad
1
Ich werde auch nur kommentieren, dass es eine Tatsache ist, dass Tabellenvariablen in tempdb gespeichert sind. Ich kommentiere, also lesen vielleicht MEHR Leute Kommentare und bekommen sie in den Kopf, da ich es so leid bin, als Senior Consultant in einen Joint zu gehen, um mit einem Vollzeitangestellten streiten zu müssen, der unwissend ist und versucht, etwas anderes zu sagen. Ich spreche über Dutzende von Unternehmen in Fortune 500 und bin so froh, dass die Leute Kommentare abgeben. Traurig, wenn dieses OP, das die Frage beantwortet, ihre Antwort nicht BEARBEITET, wird diese Unwissenheit noch etwa ein Jahrzehnt bestehen bleiben.
Tom Stickel
14

Der Unterschied zwischen diesen zwei Tabellen ItemBack1und #ItemBack1ist , dass das erste auf persistent (permanent) , wo , wie die anderen vorübergehend ist.

Schauen Sie sich jetzt Ihre Frage noch einmal an

Ist es notwendig, # zum Erstellen einer temporären Tabelle in einem SQL Server zu verwenden?

Die Antwort lautet Ja , da #die Tabelle ohne dieses Vorzeichen keine temporäre Tabelle ist, sondern unabhängig von allen Sitzungen und Bereichen.

zzlalani
quelle