ご存知のとおり、SQLServerとOracleの一時テーブルは根本的に異なります。
Oracleでは、グローバル一時テーブルは、一時セッション固有(またはトランザクション固有)のデータを格納する永続オブジェクトです。
SQL Serverでは、一時テーブルは一時データを格納する一時オブジェクトであり、#temp_tablesはセッションに対してローカルなデータを格納し、##temp_tablesはグローバルなデータを格納します。 (SQL Serverグローバル一時テーブルが必要になったことがなく、どのような問題が解決されるかわかりません。)#temp_tableがストアドプロシージャで作成された場合、ストアドプロシージャが終了すると削除されます。それ以外の場合は、セッションが閉じたときに削除されます。
いいえ、SQLServerをOracleに模倣させる方法は実際にはありません。セッションIDを格納する追加の列を持つ通常のテーブルを使用できます。ただし、ロギングが少ないという点で一時テーブルの利点は得られません。一時データを手動で削除する必要があります。そして、途中で終了したセッションからのクリーンアップに対処します。
編集: OracleとSQLServerのもう1つの違いは、SQLServerではDDLを他のステートメントとのトランザクションでラップできることです。したがって、より大きなトランザクションの一部として一時テーブルを使用する必要がある場合は、create table #table_name...
ステートメントは、create table
のように現在のトランザクションを暗黙的にコミットしません ステートメントはOracleにあります。