Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pengantar Tabel Sementara di SQL Server

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengembalikan Nilai Kode ASCII untuk Karakter yang diberikan di SQL Server

  2. SQL Server 2008 Data vertikal ke Horizontal

  3. Bagaimana saya bisa mendapatkan daftar nama elemen dari nilai XML di SQL Server

  4. Bagaimana saya bisa memotong datetime di SQL Server?

  5. Bisakah saya mengaktifkan aign_dup_key untuk kunci utama?