Apakah perlu menggunakan # untuk membuat tabel temp di SQL server?

91

Apakah perlu digunakan #sebelum membuat tabel sementara di SQL server?

Contoh:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Untuk ItemBack1 apakah perlu menggunakan #simbol?

Jika tidak, lalu apa gunanya #membuat tabel temp?

Arun CM
sumber
3
Iya. # membuat tabel sementara. Tanpa itu membuat tabel.
Jeow Li Huan

Jawaban:

151

Iya. Anda perlu mengawali nama tabel dengan "#" (hash) untuk membuat tabel sementara.

Jika Anda TIDAK membutuhkan tabel nanti, lanjutkan & buat tabel tersebut. Tabel Sementara sangat mirip dengan tabel biasa. Namun, itu dibuat di tempdb. Juga, ini hanya dapat diakses melalui sesi saat ini yaitu Untuk EG: jika pengguna lain mencoba mengakses tabel temp yang dibuat oleh Anda, dia tidak akan dapat melakukannya.

"##" (hash ganda membuat tabel temp "Global" yang juga dapat diakses oleh sesi lain.

Lihat tautan di bawah ini untuk Dasar-dasar Tabel Sementara: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Jika konten tabel Anda kurang dari 5000 baris & TIDAK berisi tipe data seperti nvarchar (MAX), varbinary (MAX), pertimbangkan untuk menggunakan Variabel Tabel.

Mereka adalah yang tercepat karena sama seperti variabel lain yang disimpan di RAM. Mereka juga disimpan di tempdb, bukan di RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Info Lebih Lanjut tentang Variabel Tabel: http://odetocode.com/articles/365.aspx

mobiledaemon
sumber
11
Di SQL Server, sintaks SELECT adalah INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384
8
Tabel variabel tidak disimpan di RAM, mereka juga disimpan di tempdb. Saya akan merekomendasikan untuk tidak menggunakan variabel tabel kecuali Anda memahami beberapa kelemahannya, karena jumlah baris mereka secara otomatis diatur ke satu, dan rencana buruk dapat terjadi.
ConstantineK
Dapatkah Anda memberikan sumber untuk 5000 baris, batasan nvarchar (max), varbinary (max)? Ini diperbolehkan, tetapi saya tidak yakin mengapa tidak disarankan.
Brad
1
Saya juga berpikir variabel tabel disimpan dalam memori. Saya berdiri dikoreksi: dba.stackexchange.com/a/16386/23720
Baodad
1
Saya hanya akan berkomentar juga bahwa itu adalah fakta bahwa variabel tabel disimpan di tempdb. Saya berkomentar jadi mungkin LEBIH BANYAK orang membaca komentar dan memasukkannya ke dalam kepala karena saya sangat lelah berjalan ke suatu tempat sebagai konsultan senior harus berdebat dengan karyawan penuh waktu yang cuek dan mencoba mengatakan sebaliknya. Saya berbicara tentang lusinan perusahaan di Fortune 500, sangat senang melihat komentar orang. Sungguh menyedihkan, kecuali OP yang menjawab pertanyaan ini benar-benar MENGEDIT jawaban mereka, kami akan terus membiarkan ketidakpedulian ini bertahan selama satu dekade atau lebih.
Tom Stickel
14

Perbedaan antara dua tabel ini ItemBack1dan tabel #ItemBack1pertama bersifat persisten (permanen) sedangkan tabel lainnya bersifat sementara.

Sekarang jika lihat pertanyaan Anda lagi

Apakah perlu menggunakan # untuk membuat tabel temp di sql server?

Jawabannya adalah Ya , karena tanpa ini sebelumnya #tabel tidak akan menjadi tabel sementara, itu akan independen dari semua sesi dan cakupan.

zzlalani
sumber