SQL sunucusunda geçici tablolar oluşturmak için # kullanmak gerekli midir?


91

#SQL sunucusunda geçici bir tablo oluşturmadan önce kullanmak gerekli midir?

Misal:

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

ItemBack1 için #sembolü kullanmak gerekli midir?

Değilse, o zaman #geçici tablolar oluşturmanın faydası nedir?


3
Evet. # geçici tablo oluşturur. Onsuz bir tablo oluşturur.
Jeow Li Huan

Yanıtlar:


151

Evet. Geçici tablolar oluşturmak için tablo adının önüne "#" (karma) eklemeniz gerekir.

Tabloya daha sonra ihtiyacınız YOKSA, devam edin ve oluşturun. Geçici Tablolar normal tablolara çok benzer. Ancak tempdb'de oluşturulur. Ayrıca, yalnızca mevcut oturum aracılığıyla erişilebilir. Örneğin: başka bir kullanıcı sizin tarafınızdan oluşturulan geçici tabloya erişmeye çalışırsa, bunu yapamaz.

"##" (çift hash, diğer oturumlar tarafından da erişilebilen "Global" geçici tablo oluşturur.

Geçici Tabloların Temelleri için aşağıdaki bağlantıya bakın: http://www.codeproject.com/Articles/42553/Quick-Overview-Tporary-Tables-in-SQL-Server-2005

Tablonuzun içeriği 5000 satırdan azsa ve nvarchar (MAX), varbinary (MAX) gibi veri türlerini İÇERMİYORSA, Tablo Değişkenlerini kullanmayı düşünün.

RAM'de depolanan diğer değişkenler gibi en hızlısıdırlar. RAM'de değil tempdb'de de saklanırlar .

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;

Tablo Değişkenleri Hakkında Daha Fazla Bilgi: http://odetocode.com/articles/365.aspx


11
SQL Server'da, SELECT sözdizimi INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384

8
Değişken tablolar RAM'de değil tempdb'de de depolanır. Satır sayıları otomatik olarak bire ayarlandığından ve kötü planlar sonuçlanabileceğinden, bazı dezavantajlarını anlamadığınız sürece tablo değişkenlerini kullanmamanızı tavsiye ederim.
ConstantineK

5000 satır, nvarchar (maks), değişken (maks.) Kısıtlamalar için bir kaynak verebilir misiniz? Buna izin verilir, ancak neden tavsiye edilmediğinden emin değilim.
Brad

1
Ben de tablo değişkenlerinin bellekte saklandığını düşündüm. Düzeltilmiş durumdayım
Baodad

1
Ben de sadece tablo değişkenlerinin tempdb'de depolandığının bir gerçek olduğu yorumunu yapacağım. Yorum yapıyorum, belki DAHA FAZLA insan yorumları okuyup kafalarına sokuyor çünkü kıdemli bir danışman olarak bir ortaklığa girip cahil ve aksini söylemeye çalışan tam zamanlı bir çalışanla tartışmaktan çok yoruldum. Fortune 500'deki düzinelerce şirketten bahsediyorum, insanların yorum yaptığını görmekten çok memnunum. Ne yazık ki, soruyu cevaplayan bu OP cevabını DÜZENLEMEDİKÇE, bu cahilliği yaklaşık on yıl daha devam ettireceğiz.
Tom Stickel

14

Bu iki tablo arasındaki fark ItemBack1ve #ItemBack1önceliği diğer geçici olarak burada kalıcı (kalıcı) olmasıdır.

Şimdi soruna bir daha bakarsan

Sql sunucuda geçici tablo oluşturmak için # kullanmak gerekli midir?

Cevap Evet , çünkü bu olmadan #tablo geçici bir tablo olmayacak, tüm oturumlardan ve kapsamlardan bağımsız olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.