Tijdelijke tabellen in Oracle zijn permanente objecten die tijdelijke gegevens bevatten die lokaal in de sessie zijn. Tijdelijke tabellen in SQL Server zijn tijdelijke objecten.
- In SQL Server bevat een globale tijdelijke tabel gegevens die voor alle sessies zichtbaar zijn. "Globale tijdelijke tabellen zijn zichtbaar voor elke gebruiker en elke verbinding nadat ze zijn gemaakt." http://msdn.microsoft.com/en-us/library/ms186986 .aspx
- Globale tijdelijke tabellen zijn nog steeds tijdelijke objecten die niet voor onbepaalde tijd blijven bestaan en die mogelijk vóór gebruik moeten worden gemaakt. "Globale tijdelijke tabellen worden ... worden verwijderd wanneer alle gebruikers die naar de tabel verwijzen, de verbinding met het exemplaar van SQL Server verbreken." http://msdn.microsoft.com/en-us/library/ms186986 .aspx
Ik vind dat een lokale tijdelijke tabel, of tabelvariabele, het dichtst in de buurt komt van de globale tijdelijke tabel van Oracle, het grote verschil is dat je deze elke keer moet maken.
Gewoonlijk, in een geval als het uwe, zou stap 3, rijen toevoegen aan de tijdelijke tabel, gedaan worden door een select ... into #temp_table_name ....
(equivalent aan Oracle create table ... as select ...
) http://msdn.microsoft.com/en-us/library/ ms188029.aspx
U kunt ook het volgende niet doen in een opgeslagen proces:(pseudocode.)
begin proc
call another proc to create local temp table.
use temp table
end proc
Lokale tijdelijke tabellen worden vernietigd wanneer ze terugkeren van de opgeslagen procedure waarmee ze zijn gemaakt.
Update 2014-10-14: Het gedrag van lokale tijdelijke tabellen is anders in de Parallel Data Warehousev-versie van SQL Server. Tijdelijke tabellen worden niet verwijderd bij het afsluiten van de opgeslagen procedure waarmee ze zijn gemaakt, maar blijven bestaan voor de rest van de sessie. Dit gedrag waargenomen op:
select @@version
Microsoft SQL Server 2012 - 10.0.5108.1 (X64) Jun 24 2014 20:17:02 Copyright (c) Microsoft Corporation Parallel Data Warehouse (64-bit) on Windows NT 6.2 <X64> (Build 9200: )