SQL Server’de Geçici Tablo Oluşturma Yöntemleri

SQL Server’da 3 tür geçici tablo oluşturma yöntemi bulunuyor. Uygulama bir biçimde birlikte yapalım.

  • Yerel Geçici Tablolar (Local Temporary Tables): # sembol ile oluşturur ve sadece oluşturulduğu sorgu sayfasında çalışır. Oturum kapatıldığında otomatik olarak silinir. 
  • Genel Geçici Tablolar (Global Temporary Tables): ## sembol ile oluşturur ve tüm sorgu sayfalar tarafından erişilebilir. Bağlantı sonlandırıldığında otomatik olarak silinir.
  • Değişken Tablo (Table Variable): DECLARE @Table (column1 datatype,…) ifade ile oluşturulur

Sql Server’da Yerel Tablo nasıl oluşturulur?

Bir sorgu sayfası üzerinde geçici tablo oluşturmak için # sembol ile oluşturacağız.

CREATE TABLE #GeciciTablo (
SiraNo INT PRIMARY KEY IDENTITY(1,1),
Aciklama NVARCHAR(500),
Tarih DATETIME DEFAULT GETDATE()
)

Bu sorgu, #GeciciTablo isimli geçici bir tablo oluşturur. Tablonun sütunları ve özellikleri aşağıdaki gibidir:

  1. Sirano
    • Tipi: INT (integer)
    • Özellik: Birincil anahtar “PRIMARY KEY” ve otomatik artan “IDENTITY(1,1)”. Her yeni kayıt eklendiğinde, bu sütun değeri otomatik olarak 1 artar.
  2. Aciklama
    • Özellik: Metin alanı, maksimum 500 karakter uzunluğunda veri alabilir
    • Tip: NVARCHAR(500)
  3. Tarih
    • Tip: DATETIME
    • Özellik: Varsayılan değer (DEFAULT GETDATE()). Veri ekleme sırasında tarih belirtilmezse, sistemin mevcut tarih ve saatini otomatik olarak ekler.

Böylece, Her yeni kayıt eklendiğinde benzersiz bir otomatik sıra numarası oluşturulur, açıklamalar metin olarak yazdırılır ve tarih bilgisi standart olarak eklenir.

Değişken tipinde tablo nasıl oluşturulur?

DECLARE @tblPersonel TABLE (
CalisanNo INT PRIMARY KEY IDENTITY(100,10),
AdiVeSoyadi NVARCHAR(500),
GirisTarihi DATETIME NOT NULL
)

Bu sorgu, @tblPersonel isimli geçici bir tablo oluşturur. Tablonun sütunları ve özellikleri aşağıdaki gibidir: 

  1. CalisanNo
    • Tipi: INT (integer)
    • Özellik: Birincil anahtar (PRIMARY KEY) ve otomatik artan (IDENTITY(100,10)). İlk değer 100 olarak başlar ve her yeni kayıt eklendiğinde 10 artar. 
  1. AdiVeSoyadi
    • Tipi: NVARCHAR(500) 
    • Özellik: Metin alanı, maksimum 500 karakter uzunluğunda veri alabilir. 
  1. GirisTarihi
    • Tipi: DATETIME
    • Özellik: Boş bırakılamaz (NOT NULL). Bu sütun, her kaydın giriş tarihini saklar ve boş bırakılması durumunda hata verir. 

Bu yapı, personel bilgilerini geçici olarak saklamak için kullanılır. Her yeni çalışan kaydı için benzersiz bir otomatik olarak çalışan numarası oluşturulur, ad ve soyad bilgileri metin olarak saklar ve giriş tarihi bilgisi zorunlu olarak eklenir. 

Sorgular arası geçici tablo nasıl oluşturulur?

## ile tabloyu oluşturabiliriz.

CREATE TABLE ##GeciciTablo (
SiraNo INT PRIMARY KEY IDENTITY(1,1),
Aciklama NVARCHAR(500),
Tarih DATETIME DEFAULT GETDATE()
)

Geçici tablo oluşturdum ancak veri nasıl ekleyebilirim?

Geçici tablolara veri eklemek için bir kaç yöntem bulunuyor. Aşağıda bir kaç tane paylaşıyorum.

INSERT INTO SELECT

Başka bir tablodan veri seçip geçici tabloya eklemek için kullanabiliriz.

INSERT INTO @tblPersonel (AdiVeSoyadi, GirisTarihi)
SELECT AdiVeSoyadi, GirisTarihi
FROM Calisanlar
WHERE Departman = 'BT'; --Departman, BT olan kayıtları getiriyoruz.

INSERT INTO VALUES

Girmiş olduğumuz değerleri manuel olarak eklemek için kullanabiliriz.

INSERT INTO @tblPersonel (AdiVeSoyadi, GirisTarihi)
VALUES ('Mehmet Demir', '2024-09-17 09:00:00'),
       ('Ayşe Dağ', '2024-09-18 10:00:00');

INSERT INTO EXEC

Saklı yordam (stored procedure) sonucunu geçici tabloya eklemek için kullanabiliriz.

INSERT INTO @tblPersonel (AdiVeSoyadi, GirisTarihi)
EXEC sp_GetirPersonelListesi;

INSERT INTO OUTPUT

 Eklenen verileri başka bir tabloya veya geçici tabloya eklemek için kullanabiliriz.

INSERT INTO @tblPersonel (AdiVeSoyadi, GirisTarihi)
OUTPUT inserted.*
VALUES ('Güneş Kaya', '2024-09-01 09:00:00');

İyi günler.

İNCELEMEK İSTEYEBİLECEĞİNİZ YAZILARIM

Leave a Reply