Som du har opdaget, er SQL Server og Oracle midlertidige tabeller fundamentalt forskellige.
I Oracle er globale midlertidige tabeller permanente objekter, der gemmer midlertidige sessionsspecifikke (eller transaktionsspecifikke) data.
I SQL Server er midlertidige tabeller midlertidige objekter, der lagrer midlertidige data, med #temp_tables, der lagrer data, der er lokale for en session, og ##temp_tables, der lagrer data, der er globale. (Jeg har aldrig haft behov for SQL Server globale midlertidige tabeller og ved ikke, hvilket problem de løser.) Hvis #temp_table blev oprettet i en lagret procedure, vil den blive slettet, når den lagrede procedure afsluttes. Ellers vil den blive droppet, når sessionen lukker.
Og nej, der er virkelig ikke en måde at få SQL Server til at efterligne Oracle. Du kan bruge en normal tabel med en ekstra kolonne, der gemmer et sessions-id. Men du ville ikke få fordelene ved midlertidige tabeller med hensyn til mindre logning. Du skal manuelt slette de midlertidige data. Og beskæftige dig med at rydde op fra sessioner, der stopper for tidligt.
EDIT: En anden forskel mellem Oracle og SQL Server er, at SQL Server tillader DDL at blive pakket ind i en transaktion med andre udsagn. Så hvis du skal bruge en midlertidig tabel som en del af en større transaktion, skal du create table #table_name...
sætning vil ikke implicit begå den aktuelle transaktion som en create table
erklæring ville i Oracle.