Di SQL Server, apa perbedaan antara tabel @, tabel # dan tabel ##?
Di SQL Server, apa perbedaan antara tabel @, tabel # dan tabel ##?
Jawaban:
#table mengacu pada tabel sementara lokal (hanya dapat dilihat oleh pengguna yang membuatnya).
##table mengacu pada tabel sementara global (dapat dilihat oleh semua pengguna).
@variableName mengacu pada variabel yang dapat menyimpan nilai tergantung pada tipenya.
#dan ##tabel adalah tabel aktual yang direpresentasikan dalam database temp. Tabel ini dapat memiliki indeks dan statistik, dan dapat diakses di seluruh sprocs dalam satu sesi (dalam kasus tabel temp global, ini tersedia di seluruh sesi).
@Table adalah variabel tabel.
Untuk lebih lanjut: http://www.sqlteam.com/article/temporary-tables
Saya akan fokus pada perbedaan antara #table dan @table. ## tabel adalah tabel sementara global dan sebagai catatan selama lebih dari 10 tahun menggunakan SQL Server, saya belum menemukan kasus penggunaan yang valid. Saya yakin bahwa beberapa ada tetapi sifat objek membuatnya sangat tidak dapat digunakan IMHO.
Tanggapan untuk @whiner oleh @marc_s benar-benar benar: ini adalah mitos umum bahwa variabel tabel selalu berada dalam memori. Sebenarnya sangat umum untuk variabel tabel untuk pergi ke disk dan beroperasi seperti tabel temp.
Pokoknya saya sarankan untuk membaca set perbedaan dengan mengikuti tautan yang ditunjukkan oleh @Astander. Sebagian besar perbedaan melibatkan batasan pada apa yang tidak dapat Anda lakukan dengan variabel @table.
CREATE TABLE #t
Membuat tabel yang hanya terlihat pada dan selama CONNECTION itu pengguna yang sama yang membuat koneksi lain tidak akan bisa melihat tabel #t dari koneksi lain.
CREATE TABLE ##t
Membuat tabel sementara yang dapat dilihat oleh koneksi lain. Tapi tabel dijatuhkan ketika koneksi pembuatan diakhiri.
SqlConnection.Open()dengan string koneksi yang sama adalah CONNECTION yang sama ?