2008-09-04 28 views
1

In einer gespeicherten Prozedur wann wird #Temptable in SQL Server 2005 erstellt? Beim Erstellen des Abfrageausführungsplans oder beim Ausführen der gespeicherten Prozedur?Temporäre SQL Server 2005-Tabellen

if (@x = 1) 
    begin 
     select 1 as Text into #Temptable 
    end 
else 
    begin 
     select 2 as Text into #Temptable 
    end 

Antwort

1

Interessante Frage.

Für den Typ der temporären Tabelle, die Sie erstellen, denke ich es ist, wenn die gespeicherte Prozedur ausgeführt wird. Tabellen, die mit dem Präfix # erstellt wurden, sind für die SQL Server-Sitzung verfügbar, in der sie erstellt wurden. Wenn die Sitzung beendet ist, werden sie gelöscht.

Diese URL: http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx scheint anzugeben, dass temporäre Tabellen nicht erstellt werden, wenn Abfrageausführungspläne erstellt werden.

2

Es wird erstellt, wenn es ausgeführt und gelöscht wird, wenn die Sitzung beendet wird.

1

Während es am Ende einer Sitzung automatisch gelöscht wird, empfiehlt es sich, die Tabelle selbst zu löschen, wenn Sie damit fertig sind.

1

Sie sollten auch Tabellenvariablen berücksichtigen, 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 benutze fast immer diesen Ansatz, aber es hat Nachteile. Vor allem können Sie nur Indizes verwenden, die Sie im TABLE() - Konstrukt deklarieren können, was im Wesentlichen bedeutet, dass Sie nur den Primärschlüssel verwenden dürfen - nein, wenn Sie ALTER TABLE verwenden.

Verwandte Themen