SQL Server'da @ tablosu, # tablosu ve ## tablosu arasındaki fark nedir?
SQL Server'da @ tablosu, # tablosu ve ## tablosu arasındaki fark nedir?
Yanıtlar:
#table
yerel (yalnızca onu oluşturan kullanıcı tarafından görülebilir) geçici bir tabloyu ifade eder.
##table
genel (tüm kullanıcılar tarafından görülebilir) geçici bir tabloyu ifade eder.
@variableName
türüne bağlı olarak değerleri tutabilen bir değişkeni ifade eder.
#
ve ##
tablolar, geçici veritabanında temsil edilen gerçek tablolardır. Bu tablolar dizinlere ve istatistiklere sahip olabilir ve bir oturumdaki sprocs üzerinden erişilebilir (genel bir geçici tablo olması durumunda, oturumlar arasında kullanılabilir).
@Table bir tablo değişkenidir.
Daha fazlası için: http://www.sqlteam.com/article/temporary-tables
#Table ve @table arasındaki farklara odaklanırdım. ## tablosu küresel bir geçici tablodur ve 10 yılı aşkın süredir SQL Server kullanımıyla ilgili kayıt için henüz geçerli bir kullanım örneğiyle karşılaşmadım. Eminim bazılarının vardır, ancak nesnenin doğası onu çok kullanılamaz hale getirir IMHO.
@Marc_s tarafından @whiner'a verilen yanıt kesinlikle doğrudur: tablo değişkenlerinin her zaman bellekte yaşadığı yaygın bir efsanedir. Bir tablo değişkeninin diske gitmesi ve geçici bir tablo gibi çalışması aslında oldukça yaygındır.
Her neyse, @Astander tarafından belirtilen bağlantıları takip ederek farklılıklar kümesini okumayı öneririm. Farkın çoğu, @table değişkenleriyle yapamayacağınız şeylerle ilgili sınırlamaları içerir.
CREATE TABLE #t
Yalnızca bu BAĞLANTI üzerinde görünen bir tablo oluşturur ve bu BAĞLANTI sırasında başka bir bağlantı oluşturan aynı kullanıcı, diğer bağlantıdan #t tablosunu göremez.
CREATE TABLE ##t
Diğer bağlantıların görebildiği geçici bir tablo oluşturur. Ancak oluşturulan bağlantı sona erdiğinde tablo bırakılır.
SqlConnection.Open()
ile aynı bağlantı dizesi olan aynı BAĞLANTI ?