Di SQL Server, tabel sementara dibuat menggunakan CREATE TABLE
yang sama sintaks sebagai tabel biasa. Perbedaannya adalah bahwa nama tabel sementara diawali dengan satu atau dua tanda angka (#
), bergantung pada apakah itu tabel sementara lokal atau tabel sementara global:
- Tabel sementara lokal diawali dengan tanda angka tunggal (
#
) - Tabel sementara global diawali dengan tanda angka ganda (
##
)
Contoh 1 – Membuat Tabel Sementara Lokal
Berikut ini contoh membuat tabel sementara lokal:
CREATE TABLE #Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Nama yang Anda tentukan untuk tabel sementara lokal maksimal 116 karakter. Jenis tabel lain dapat terdiri dari 128 karakter, tetapi tabel sementara lokal secara otomatis ditambahkan dengan akhiran numerik yang dihasilkan sistem.
Contoh 2 – Membuat Tabel Sementara Global
Berikut ini contoh membuat tabel sementara global:
CREATE TABLE ##Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Nama tabel sementara global maksimal 128 karakter. SQL Server tidak menambahkan sufiks numerik yang dihasilkan sistem ke tabel sementara global seperti yang dilakukan untuk tabel sementara lokal, sehingga Anda dapat menggunakan ruang penuh.
Contoh 3 – Lihat Tabel Sementara
Saya dapat menjalankan kueri berikut untuk melihat tabel sementara yang baru saya buat.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#Cats%' OR name = '##Cats';
Hasil:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | +----------------------------------------------------------------------------------------------------------------------------------+
Kita dapat melihat bahwa tabel sementara lokal telah menambahkan sufiks numerik yang dihasilkan sistem, dan inilah mengapa kueri saya menggunakan LIKE
operator untuk tabel itu.
Contoh 4 – Sesi Baru
Jika saya membuka sesi baru, buat tabel sementara lokal dengan nama yang sama (Kucing), lalu jalankan kueri ini lagi, saya mendapatkan ini:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | +----------------------------------------------------------------------------------------------------------------------------------+
Jadi beberapa sesi dapat membuat tabel lokal dengan nama yang sama karena SQL Server memodifikasi nama tersebut dengan menambahkan sufiks.
Contoh 5 – Sesi yang Sama
Namun, jika saya mencoba membuat tabel sementara lokal lagi di sama sesi, saya mendapatkan ini:
Msg 2714, Level 16, State 6, Line 1 There is already an object named '#Cats' in the database.
Dan jika saya membuka sesi lain, saya berhasil, dan ketika saya menanyakan tempdb.sys.tables
Saya mengerti ini:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | | #Cats_______________________________________________________________________________________________________________00000000001B | +----------------------------------------------------------------------------------------------------------------------------------+