Temporäre Tabellen (#temp und ##temp)

Frage:
Worin besteht der Unterschied einer globalen temporären Tabelle (##temp) zu einer lokalen temporären Tabelle (#temp)?

Lösung:
Die lokalen temporären Tabellen (#) sind nur innerhalb der Session vorhanden, in der sie erzeugt wurden.
Eine in einer Stored Procedure erzeugte #temp-Tabelle steht auch nur in dieser Stored Procedure zur Verfügung. Sofern die Stored Procedure weitere Stored Procedures aufruft, kann die temporäre Tabelle auch in diesen genutzt werden. Die temporäre Tabelle ist außerhalb der Stored Procedure nicht sichtbar. Nach Beendigung der äußeren Stored Procedure wird die temporäre Tabelle gelöscht.

Eine globale temporäre Tabelle (##) ist auch außerhalb der Session, in der sie erstellt wurde, sichtbar.
Die globale wird wie die lokale innerhalb einer Session erzeugt und gelöscht, wenn diese Session beendet wird. Doch gerade beim Löschen besteht der große Unterschied zur lokalen. Da die globale temporäre Tabelle auch außerhalb der Session sichtbar ist, kann sie auch von anderen Sessions genutzt werden. Beim Beenden der Session, die die globale temporäre Tabelle erstellt hat, wird diese nur dann gelöscht, wenn keine andere Session mit der Tabelle arbeitet. Ist dies aber der Fall, bleibt die Tabelle solange bestehen, bis die letzte Session, die mit der Tabelle arbeitet, beendet wird
.

/* übernommen aus der Original sqlfaq.de */