Tabel sementara di SQL Server, seperti namanya, adalah tabel database yang ada sementara di server database. Tabel sementara menyimpan subset data dari tabel normal untuk jangka waktu tertentu.
Tabel sementara sangat berguna ketika Anda memiliki sejumlah besar catatan dalam tabel dan Anda berulang kali perlu berinteraksi dengan subset kecil dari catatan tersebut. Dalam kasus seperti itu, alih-alih memfilter data berulang kali untuk mengambil subset, Anda dapat memfilter data sekali dan menyimpannya di tabel sementara. Anda kemudian dapat menjalankan kueri Anda di tabel sementara itu. Tabel sementara disimpan di dalam "tempdb" yang merupakan database sistem. Mari kita lihat bagaimana Anda dapat menggunakan data sementara dalam skenario sederhana.
Menyiapkan Data
Pertama-tama mari kita siapkan beberapa data dummy. Kami akan menggunakan data ini untuk membuat tabel sementara.
Jalankan skrip berikut di server database Anda.
CREATE DATABASE schooldb CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender VARCHAR(50) NOT NULL, age INT NOT NULL, total_score INT NOT NULL, ) INSERT INTO student VALUES (1, 'Jolly', 'Female', 20, 500), (2, 'Jon', 'Male', 22, 545), (3, 'Sara', 'Female', 25, 600), (4, 'Laura', 'Female', 18, 400), (5, 'Alan', 'Male', 20, 500), (6, 'Kate', 'Female', 22, 500), (7, 'Joseph', 'Male', 18, 643), (8, 'Mice', 'Male', 23, 543), (9, 'Wise', 'Male', 21, 499), (10, 'Elis', 'Female', 27, 400);
Skrip SQL di atas membuat database 'schooldb'. Dalam database ini, sebuah tabel yang disebut 'siswa' dibuat dan beberapa data dummy ditambahkan ke dalam tabel.
Membuat Tabel Sementara
Ada dua metode untuk membuat tabel sementara.
Metode 1
Cara paling sederhana untuk membuat tabel sementara adalah dengan menggunakan pernyataan INTO dalam kueri SELECT. Mari kita buat tabel sementara yang berisi nama, usia, dan jenis kelamin semua catatan siswa laki-laki dari tabel siswa.
USE schooldb; SELECT name, age, gender INTO #MaleStudents FROM student WHERE gender = 'Male'
Perhatikan kueri di atas. Di sini kami membuat tabel sementara "#MaleStudents" yang menyimpan nama, usia, dan jenis kelamin semua catatan siswa pria dari tabel siswa. Untuk mendefinisikan tabel sementara, kita menggunakan pernyataan INTO setelah pernyataan SELECT. Nama tabel sementara harus dimulai dengan hash (#).
Sekarang, untuk melihat di mana tabel ini ada; pergi ke "Object Explorer -> Database -> System Databases-> tempdb -> Tabel Sementara". Anda akan melihat nama tabel sementara Anda bersama dengan pengenal. Perhatikan gambar berikut:
Anda pasti bertanya-tanya tentang "0000000000006" di akhir nama tabel. Ini adalah pengidentifikasi unik. Beberapa koneksi database dapat membuat tabel sementara dengan nama yang sama, oleh karena itu untuk membedakan antara tabel sementara yang dibuat oleh koneksi yang berbeda, server database secara otomatis menambahkan pengenal unik ini di akhir.
Anda dapat melakukan operasi pada tabel sementara melalui koneksi yang sama yang membuatnya. Oleh karena itu, di jendela kueri yang sama dengan yang membuat tabel “#MaleStudents”, jalankan kueri berikut.
SELECT * FROM #MaleStudents
Karena, tabel #MaleStudents berisi nama, usia, dan jenis kelamin semua siswa pria. Kueri di atas akan mengambil hasil berikut.
[id tabel=15 /]
Untuk membuat koneksi baru, Anda cukup membuka jendela kueri baru di "SQL Server Management Studio". Sekarang, biarkan koneksi sebelumnya tetap terbuka dan buat tabel “MaleStudents” lain menggunakan metode 2 di jendela kueri baru (koneksi baru).
Metode 2
Metode kedua mirip dengan membuat tabel normal. Perhatikan kueri berikut. Di sini sekali lagi, kita akan membuat tabel sementara #MaleStudents. Ingat, kueri ini harus dijalankan oleh koneksi baru.
USE schooldb; CREATE TABLE #MaleStudents ( name VARCHAR(50), age int, gender VARCHAR (50) ) INSERT INTO #MaleStudents SELECT name, age, gender FROM student WHERE gender = 'Male'
Sekarang, jika Anda menjalankan kueri di atas, Anda akan melihat dua tabel sementara #MaleStudents dengan pengidentifikasi unik yang berbeda di dalam file tempdb. Ini karena kedua tabel ini dibuat oleh dua koneksi yang berbeda. Perhatikan screenshot berikut.
Tabel Sementara Global
Penting untuk disebutkan di sini bahwa, tabel sementara hanya dapat diakses oleh koneksi yang membuat tabel sementara itu. Itu tidak dapat diakses oleh koneksi lain. Namun, kita dapat membuat tabel sementara yang dapat diakses oleh semua koneksi yang terbuka. Tabel sementara semacam itu disebut tabel sementara global. Nama tabel sementara global dimulai dengan simbol hash ganda (##). Mari kita buat tabel sementara global yang berisi catatan semua siswa perempuan dari tabel siswa.
USE schooldb; SELECT name, age, gender INTO ##FemaleStudents FROM student WHERE gender = 'Female'
Sekarang, Anda dapat mengakses tabel ##FemaleStudents dari koneksi mana pun yang terbuka.
Menghapus Tabel Sementara
Ada dua cara untuk menghapus tabel sementara di SQL Server:Penghapusan Otomatis dan Penghapusan Manual.
Penghapusan Otomatis
Tabel sementara secara otomatis dihapus ketika koneksi yang membuat tabel ditutup. Alternatifnya, saat Anda menutup jendela kueri yang membuat tabel sementara, tanpa menyimpan perubahan, tabel akan ditutup. Jika koneksi mengeksekusi beberapa kueri pada tabel global, maka kueri tersebut harus diselesaikan terlebih dahulu sebelum tabel global dihapus.
Penghapusan Tabel Manual
Anda dapat menghapus tabel secara manual tanpa menutup koneksi menggunakan pernyataan DROP TABLE. Namun, ingat bahwa pernyataan harus dieksekusi oleh koneksi yang benar-benar membuat tabel. Perhatikan kueri berikut:
DROP TABLE #MaleStudents
Ini mirip dengan menghapus tabel biasa.
Tabel Sementara dan Prosedur Tersimpan
Sebelumnya kita mengetahui bahwa tabel sementara hanya dapat diakses secara lokal di dalam koneksi yang membuatnya. Ada satu pengecualian untuk aturan itu. Saat Anda membuat prosedur tersimpan, Anda juga dapat mengakses tabel sementara di koneksi lain.
Mari kita buat dua prosedur tersimpan menggunakan dua koneksi berbeda. Prosedur tersimpan pertama akan memasukkan data ke tabel #MaleStudents, sedangkan prosedur kedua akan memilih data dari tabel.
Buat koneksi baru. Jika Anda menggunakan SQL Server Management Studio, Anda dapat melakukannya dengan membuka jendela kueri baru. Jalankan skrip SQL berikut di jendela kueri baru.
Create Procedure spInsertStudent (@Name Varchar(50), @Age int, @Gender Varchar(50)) As Begin Insert Into #MaleStudents Values (@Name, @Age, @Gender) End
Kami sekarang telah membuat prosedur tersimpan yang menyisipkan catatan ke tabel sementara #MaleStudent. Perhatikan bahwa koneksi ini tidak membuat #MaleStudent, namun kami mengaksesnya dengan memasukkan catatan ke dalamnya. Ini karena saat membuat prosedur tersimpan, Anda dapat mengakses tabel sementara dari koneksi selain dari yang membuat tabel. Jika Anda menjalankan kueri di atas, Anda akan melihat bahwa SQL Server tidak akan menimbulkan kesalahan apa pun.
Demikian pula, buka koneksi baru dan buat prosedur tersimpan berikut di dalamnya:
CREATE PROCEDURE spListStudent AS BEGIN SELECT * FROM #MaleStudents ORDER BY name END
Prosedur tersimpan di atas memilih semua catatan dari tabel sementara #MaleStudents. Di sini sekali lagi, kita mengakses tabel sementara di dalam koneksi yang tidak membuat tabel tersebut.
Sekarang inilah bagian yang sulit. Meskipun Anda dapat mengakses tabel sementara di dalam koneksi lain saat membuat prosedur tersimpan, Anda tidak dapat mengakses tabel sementara saat "mengeksekusi" prosedur tersimpan di dalam koneksi lain. Untuk menjalankan prosedur tersimpan yang mengakses tabel sementara, Anda harus berada di dalam koneksi yang membuat tabel sementara.
Oleh karena itu, jalankan kueri berikut di dalam koneksi yang membuat tabel #MaleStudents.
EXECUTE spInsertStudent Bradley, 45, Male Execute spListStudent
Di sini prosedur tersimpan pertama menyisipkan catatan siswa baru dengan nama:Bradley, usia:45 dan jenis kelamin:Pria ke dalam tabel #MaleStudents. Prosedur tersimpan kedua memilih semua catatan dari tabel #MaleStudents dalam urutan nama. Output dari stored procedure di atas adalah:
[id tabel=16 /]
Anda dapat dengan jelas melihat catatan kami yang baru dimasukkan dalam catatan yang dipilih di atas.
Lihat Juga:
Performa Variabel Tabel di SQL Server
Memperkenalkan Ekspresi Tabel Umum di SQL Server