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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top