Di SQL Server, apa perbedaan antara tabel @, tabel # dan tabel ##?
sql-server
Craig Schwarze
sumber
sumber
Silahkan lihat
sumber
#
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
sumber
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.
sumber
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.
sumber
SqlConnection.Open()
dengan string koneksi yang sama adalah CONNECTION yang sama ?jika Anda memerlukan tabel temp global yang unik, buat tabel Anda sendiri dengan Uniqueidentifier Prefix / Suffix dan jatuhkan eksekusi posting jika if object_id (.... Satu-satunya kelemahan adalah menggunakan Dynamic sql dan perlu menghapus secara eksplisit.
sumber