Son Haberler
Anasayfa / Yazılım / SQL / Global Geçici Tablolar Oluşturmak

Global Geçici Tablolar Oluşturmak

Geçici tablolar iki türdedirler, lokal ve global olanlar. Lokal bir geçici tablo oluşturulduğunda ilgili lokal tabloya sadece o veritabanı bağlantısı içinde erişilir. Bağlantı kesildiğinde yani ilgili veritabanı bağlantısı kesildiğinde SQL Server açık kalsa dahi lokal tablo kaybolur. Global geçici tablolarda ise ilgili veritabanı bağlantısı kesilse dahi bir başka bağlantı üzerinden global geçici tablolara erişim sağlanır. Ta ki SQL Server kapatılana kadar. Yani SQL server üzerindeki son veritabanı bağlantısı kapatılana kadar global geçici tablolara erişim sağlanır. Global geçici tabloları oluşturmanın, lokal geçici tablo oluşturmadan tek farkı iki tane # işaretinin yanyana kullanılmasıdır, yani ##TabloAdı şeklinde kullanımı mevcut. Şimdi bir örnek gerçekleştiriyorum, işlemimi AdventureWorks2012 veri tabanı üzerinde yapıyorum.

Tablo oluşturmak için CREATE TABLE komutunu kullanacağız. Tablo içine veri aktarmak için de INSERT INTO komutunu kullanacağız. CREATE TABLE kullanımının kalıbı aşağıdaki gibidir:

CREATE TABLE ##TabloAdı (kolon1 veritipi, kolon2 veritipi)

Geçici tablolar tıpkı normal tablolar gibi oluşturulurlar sadece önlerinde ## işareti farkı vardır. Geri kalan kullanım tamamen aynı, onlarda da primary key yer alır, onlarda da kolon adı yer alır, onlarda da veri tipi belirtilir.

CREATE TABLE ##Musteriler(MusteriID INT, MusteriAd VARCHAR(50), 
MusteriSoyad VARCHAR(50)); 
INSERT INTO ##Musteriler(MusteriID,MusteriAd,MusteriSoyad)
SELECT Musteri.CustomerID, FirstName, LastName
FROM Person.Person AS Kisi INNER JOIN Sales.Customer AS Musteri
ON Kisi.BusinessEntityID = Musteri.PersonID;
SELECT MusteriID, MusteriAd, MusteriSoyad FROM ##Musteriler;

Sonucu görelim:

2013121903

Böylelikle ##Musteriler diyerek yani ## kullanarak global geçici tablomu oluşturdum. Şimdi global olup olmadığını anlayalım. Bir başka Query penceresi açıyorum ve bu query penceremde AdventureWorks2012 veritabanı bağlantısı yapmıyorum. Bağlantım master üzerinde. Yeni bir query oluşturmak için SQL Server üzerinde araç çubuğunda New Query demelisiniz.

2013121904

Yeni sorgu penceremde ##Musteriler tablosundan tüm verileri çekelim:

SELECT * FROM ##Musteriler;

Ve listeleme yaptığımda da SQL Server üzerinde master veritabanı üzerinde çalışsamda veriler listeleniyor.

2013121905

Görüleceği üzere global geçici tablolarda kullanabiliyoruz. Ama tabi bu tip tablolar SQL Server üzerinde birdeb fazla kişinin çalıştığı bir ortamda kullanılması pek uygun olmayabilir. Aynı isimde oluşmuş tablolar olabilir, bu tablolar üzerinde birden fazla kullanıcı işlem yapmak isteyebilir ve bir takım hatalar ile karşılaşılabilir, bunları göz ardı etmemek gerek.

Bir yorum

  1. dervisdemirayak

    ismail bey ve değerli arkadaşlar kolay gelsin benim sorgumda mantığımın doğru olduğunu ama syntax hatalarım var ve çözemedim,yardımcı olursanız sevinirim

    Select STOK_KODU ( Select SUM(STHAR_GCMIK) as TOPLAMGİRİS From TBLSTHAR Where STHAR_GCKOD=’G’)
    ( Select SUM(STHAR_GCMIK) as TOPLAMCIKIS From TBLSTHAR Where STHAR_GCKOD=’C’)

    SELECT(( Select SUM(STHAR_GCMIK)From TBLSTHAR Where STHAR_GCKOD=’G’)-(Select SUM(STHAR_GCMIK) From TBLSTHAR Where STHAR_GCKOD=’C’)
    From TBLSTSABIT Group BY STOK_KODU,STOK_ADI as BAKIYE
    )

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir