Geçici tablolar (Temporary Tables) ve tablo değişkenleri (Table Variables), bir sorgu veya prosedür çalışırken ara verileri saklamak için farklı mekanizmalardır.
Geçici Tablolar (örneğin, #TempTable MS SQL'de):
Tablo Değişkenleri (örneğin, @MyTable):
Örnek:
-- Geçici tablo CREATE TABLE #Temp( Id INT, Name NVARCHAR(100) ); INSERT INTO #Temp VALUES (1, 'Test'); SELECT * FROM #Temp; -- Tablo değişkeni DECLARE @MyTable TABLE (Id INT, Name NVARCHAR(100)); INSERT INTO @MyTable VALUES (2, 'Sample'); SELECT * FROM @MyTable;
#TempTable ve ##GlobalTempTable geçici tablolarının yaşam süresi ve görünürlük alanı nasıl fark eder?
Doğru cevap:
#TempTable yalnızca mevcut oturumda görünür, bağlantı kapandığında veya explicit DROP ile yok edilir.##GlobalTempTable, tabloyu kullanan son oturum kapatılana kadar tüm oturumlara açıktır veya explicit DROP ile yok edilir. Son olarak, onu kullanan son bağlantı kapandıktan sonra yok olur.-- Küresel geçici tablo CREATE TABLE ##GlobalTemp (Id INT);
Hikaye
Büyük raporların işlendiği projede, yüz binlerce satırı geçici olarak saklamak için tablo değişkeni kullanıldı. Sonuç: Performansta keskin bir düşüş yaşandı, çünkü optimizasyoncu sorguların maliyetini abarttı ve uygun olmayan planlar kullanmaya başladı. Bir geçici tablonun tempdb'de kullanılması, süre açısından önemli bir kazanç sağladı.
Hikaye
Bir prosedürde geçici tablonun açıkça silinmesini unuttuk. Tekrar eden paketli çalıştırmalarda aynı oturum içinde "nesne zaten mevcut" hataları oluştu. DROP TABLE eklenince bu sorun ortadan kalktı.
Hikaye
Raporlar arasında işlem yapma için küresel geçici tablo kullandık. Aynı anda yürütmenin davranışın tahmin edilemez hale getirdiğini göz ardı ettik — oturumlar aynı veriler için çatıştılar. Küresel tablo yerine her oturum için bireysel geçici tablolar kullanma kararı alındı.