Di SQL Server, tabel sementara adalah jenis tabel tertentu yang ada hingga keluar dari ruang lingkup (kecuali jika secara eksplisit dihapus).
Ini berbeda dengan tabel biasa (persisten), di mana tabel reguler ada secara permanen di database Anda sampai Anda secara eksplisit menjatuhkannya.
Keuntungan Tabel Sementara
Tabel sementara dapat berguna saat Anda perlu menjalankan beberapa kueri terhadap subset dari kumpulan hasil yang lebih besar. Anda dapat menggunakan SELECT... INTO
dengan WHERE
klausa untuk menempatkan subset data ke dalam tabel sementara. Anda kemudian dapat menjalankan kueri terhadap tabel sementara itu. Ini menyelamatkan Anda dari keharusan untuk terus-menerus memfilter data dari kumpulan hasil yang lebih besar saat membuat beberapa kueri.
Tabel sementara juga dapat berguna dari perspektif izin. Jika Anda perlu bekerja dengan data dari tabel persisten tetapi Anda tidak memiliki izin yang cukup untuk melakukan semua operasi yang Anda perlukan, Anda dapat menyalin data tersebut ke tabel sementara (dengan asumsi Anda memiliki akses baca) dan melakukan apa pun yang perlu Anda lakukan .
Tabel sementara juga dapat digunakan jika Anda tidak memiliki izin untuk membuat tabel (persisten) di database saat ini.
Aspek praktis lain dari tabel sementara adalah Anda dapat menggunakannya untuk menjalankan kueri ad-hoc cepat saat menjalankan pengujian, mendemonstrasikan konsep, dll, tanpa khawatir meninggalkan jejak tabel persisten yang lupa Anda jatuhkan.
TempDB
Tabel sementara dibuat di TempDB basis data. Ini adalah database sistem yang menyimpan objek pengguna sementara seperti tabel dan indeks sementara, prosedur tersimpan sementara, variabel tabel, tabel yang dikembalikan dalam fungsi bernilai tabel, dan kursor. Ini juga menyimpan objek internal yang dibuat oleh mesin database, dan menyimpan versi.
Setiap pengguna dapat membuat tabel sementara di TempDB . Anda tidak perlu mengonfigurasi izin khusus apa pun untuk TempDB akses.
Sintaks
Tabel sementara dibuat menggunakan sintaks yang sama seperti tabel biasa. Perbedaannya adalah tabel sementara diawali dengan satu atau dua tanda angka (#
):
- Tabel sementara lokal diawali dengan tanda angka tunggal (misalnya,
#table_name
) - Tabel sementara global diawali dengan tanda angka ganda (misalnya,
##table_name
)
Contoh membuat lokal tabel sementara:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Contoh pembuatan global tabel sementara:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Tabel sementara lokal hanya terlihat di sesi saat ini, dan tabel sementara global terlihat di semua sesi.
Berapa Lama Tabel Sementara Bertahan?
Tabel sementara secara otomatis dijatuhkan ketika mereka keluar dari ruang lingkup.
Anda juga dapat secara eksplisit menghapus tabel sementara dengan menggunakan DROP TABLE
.
Persisnya kapan tabel sementara dijatuhkan secara otomatis bergantung pada apakah tabel sementara bersifat lokal atau global, dan apakah dibuat dalam prosedur tersimpan atau tidak.
- Lokal :Tabel sementara lokal yang dibuat dalam prosedur tersimpan akan dihapus secara otomatis saat prosedur tersimpan selesai. Tabel dapat direferensikan oleh prosedur tersimpan bersarang yang dijalankan oleh prosedur tersimpan yang membuat tabel. Tabel tidak dapat direferensikan oleh proses yang disebut prosedur tersimpan yang membuat tabel.
Semua tabel sementara lokal lainnya dijatuhkan secara otomatis di akhir sesi saat ini.
- Global :Tabel sementara global secara otomatis dijatuhkan ketika sesi yang membuat tabel berakhir dan semua tugas lain berhenti merujuknya. Asosiasi antara tugas dan tabel dipertahankan hanya untuk kehidupan pernyataan T-SQL tunggal. Ini berarti bahwa tabel sementara global dijatuhkan pada penyelesaian pernyataan T-SQL terakhir yang secara aktif mereferensikan tabel saat sesi pembuatan berakhir.
Skema
Semua tabel sementara dibuat di dbo skema. Jika Anda secara eksplisit menentukan skema yang berbeda, skema tersebut akan diabaikan.
Kunci Asing
Batasan KUNCI ASING tidak diterapkan pada tabel sementara. Jika Anda menentukan kunci asing, tabel tetap dibuat, hanya tanpa kunci asing. Sebuah pesan akan dikembalikan memberitahu Anda tentang hal ini.