Temporärer Tabellenbereich?

7

Ich verwende die temporären Tabellen #tempTable in meiner gespeicherten Prozedur - die ich verwende, um meine ASP.net-Berichte (Reporting-Dienste) auszuführen

Ich mache etwas wie

z. Code

%Vor%

Dann benutze ich etwas wie

%Vor%

um Werte an meine Berichte zu senden, aka Ergebnisse für die gespeicherte Prozedur

Ich werde meine #tempTable

nicht los

d. Ich tue das nicht

%Vor%

Ich habe gelesen, dass der Umfang der temporären Tabelle nur für die gespeicherte Prozedur ist - also das oben Notwendige tut - wenn ich das obige nicht tue, werde ich in Zukunft Probleme bekommen

    
soldieraman 26.07.2010, 01:55
quelle

4 Antworten

10

Zuerst werden lokale temporäre Tabellen, die innerhalb einer Prozedur erstellt wurden, gelöscht, sobald die Prozedur abgeschlossen ist. Aus der BOL-Tabelle erstellen :

  

Eine lokale temporäre Tabelle, die in einer gespeicherten Prozedur erstellt wurde, wird automatisch gelöscht, wenn die gespeicherte Prozedur beendet ist. Auf die Tabelle kann durch alle verschachtelten gespeicherten Prozeduren verwiesen werden, die von der gespeicherten Prozedur, die die Tabelle erstellt hat, ausgeführt werden. Auf die Tabelle kann nicht von dem Prozess verwiesen werden, der die gespeicherte Prozedur aufgerufen hat, die die Tabelle erstellt hat.

Wenn Ihr Datenzugriffscode eine Verbindung ordnungsgemäß öffnet, eine gespeicherte Prozedur aufruft und dann die Verbindung schließt, wird die in der Prozedur erstellte temporäre Tabelle effektiv zerstört.

Ich sage "effektiv", um einen anderen Punkt anzuführen. Ich würde nicht empfehlen, die temporäre Tabelle am Ende der Prozedur zu löschen, obwohl ich eine Überprüfung hinzufügen würde, bevor ich die temporäre Tabelle erstellt habe, und sie ablegen, wenn sie existiert (z. B. if object_id('tempdb..#Foo') is not null ). Das Argument gegen das Löschen der temporären Tabelle am Ende besteht darin, dass Sie SQL Server durch Aufrufen der Drop-Anweisung dazu zwingen, Ressourcen zu verwenden, um die Tabelle dann und dort zu zerstören, während Sie auf das Ende der Prozedur warten. Wenn Sie stattdessen den Bereich verlassen, wird die Prozedur sofort beendet und SQL Server kann die Tabelle zu einem Zeitpunkt löschen, den sie selbst gewählt haben.

    
Thomas 26.07.2010 23:19
quelle
7

Die #Temp-Tabelle hat einen begrenzten Umfang für IHRE SESSION und die Lebensdauer des Stapels, dh niemand kann Ihre temporäre Tabelle sehen und jeder andere kann seine eigene #Temp-Tabelle mit demselben Namen erstellen. Sobald Ihre Sitzung oder Ihr Batch beendet ist, bereinigt SQL Server die temporäre Tabelle.

Auf einem anderen Hinweis verhält sich die ## Temp-Tabelle wie eine normale Tabelle. Jeder kann es sehen, und es kann nicht mehr als 1 ## Temp Tabelle mit dem gleichen Namen geben. SQL Server bereinigt diese ## Temp-Tabellen beim Neustart des Servers.

    
elvis 27.03.2012 15:55
quelle
2

Es wird als gute Programmierpraxis angesehen, jede temporäre Tabelle, die Sie erstellen, explizit zu löschen. Wenn Sie Skripts über SQL Server Management Studio / Query Analyzer ausführen, werden die temporären Tabellen beibehalten, bis Sie sie explizit löschen oder bis Sie die Sitzung schließen.

    
Myles J 26.07.2010 02:52
quelle
1

Im Allgemeinen werden Sie wahrscheinlich keine Probleme haben, indem Sie keine temporären Tabellen löschen. Die lokale temporäre Tabelle hat den Sitzungsumfang oder in Ihrem Fall den SP-Bereich. Es wird automatisch fallen gelassen, wenn die Sitzung geschlossen oder der SP abgeschlossen wird.

Sie erhöhen jedoch das Risiko von Problemen, indem Sie diese Praxis regelmäßig befolgen. Wenn Sie beispielsweise keinen SP verwenden, aber Ihre SELECT-Anweisung von ASP .net senden und die SQL Server-Verbindung geöffnet lassen, wird die temporäre Tabelle weiterhin vorhanden sein. Die fortgesetzte Verwendung der Verbindung und anderer temporärer Tabellen führt zu einem Anstieg von tempdb im Laufe der Zeit.

Ich unterstütze auch die anderen Kommentare bezüglich der Verwendung von temporären Tabellen in diesem Fall. Wenn Sie eine Lösung ohne temporäre Tabellen erstellen, haben Sie wahrscheinlich einen schnelleren Bericht und vermeiden auch den Befehl DROP temp table.

    
bobs 26.07.2010 22:29
quelle