Temporäre SQL Server 2005-Tabellen
-
09-06-2019 - |
Frage
Wann wird #Temptable in einer gespeicherten Prozedur in SQL Server 2005 erstellt?Beim Erstellen des Abfrageausführungsplans oder beim Ausführen der gespeicherten Prozedur?
if (@x = 1)
begin
select 1 as Text into #Temptable
end
else
begin
select 2 as Text into #Temptable
end
Lösung
Interessante Frage.
Bei der Art der temporären Tabelle, die Sie erstellen, denke ich, dass dies der Fall ist, wenn die gespeicherte Prozedur ausgeführt wird.Tabellen, die mit dem Präfix # erstellt wurden, sind für die SQL Server-Sitzung, in der sie erstellt wurden, zugänglich.Sobald die Sitzung beendet ist, werden sie gelöscht.
Diese URL: http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx scheint darauf hinzudeuten, dass beim Erstellen von Abfrageausführungsplänen keine temporären Tabellen erstellt werden.
Andere Tipps
Es wird erstellt, wenn es ausgeführt wird, und gelöscht, wenn die Sitzung endet.
Obwohl es am Ende einer Sitzung automatisch gelöscht werden kann, empfiehlt es sich, den Tisch selbst zu löschen, wenn Sie damit fertig sind.
Möglicherweise möchten Sie auch Tabellenvariablen in Betracht ziehen, deren Lebenszyklus vollständig für Sie verwaltet wird.
DECLARE @MyTable TABLE (MyPK INT IDENTITY, MyName VARCHAR(100))
INSERT INTO @MyTable ( MyName ) VALUES ( 'Icarus' )
INSERT INTO @MyTable ( MyName ) VALUES ( 'Daedalus' )
SELECT * FROM @MyTable
Ich verwende diesen Ansatz fast immer, aber er hat auch Nachteile.Vor allem können Sie nur Indizes verwenden, die Sie innerhalb des TABLE()-Konstrukts deklarieren können, was im Wesentlichen bedeutet, dass Sie nur auf den Primärschlüssel beschränkt sind – keine Verwendung von ALTER TABLE.