Table Variable Kullanımı

20 Ara by NURULLAH ÇAKIR

Table Variable Kullanımı

Table Variable özel bir veri tipidir. Sorgu içersinde bir sonuç kümesini table variable oluşturup içine atabilir ve daha sonra tekrar kullanabiliriz. Temp tablolara benzer. Fakat bazı farkları vardır. Temp tablolar ve Table Variable arasındaki farkları “Temp Tablo ve Table Variable Farkları” isimli makalemde bulabilirsiniz.

Table Variable’ı aşağıdaki şekilde oluşturup kayıt ekleyip select çekebilirsiniz.

DECLARE  @TableVariableTablo table(TableVariableKolon varchar(50))
Insert Into @TableVariableTablo VALUES('testkayıt')
Select * From @TableVariableTablo

 

Yukarıdaki script’te VALUES kısmı yerine başka bir select ifadesi yazarak tablonuzdaki kayıtları Table Variable’a aktarabilirsiniz.

Table Variable tanımlandıkları stored procedure ya function bittiği anda silinirler.

Select INTO ifadesiyle table variable’a veri aktaramazsınız.

Table Variable ‘da transaction mantığı yoktur. BEGIN TRANSACTION ‘dan sonra ROLLBACK yapamazsınız.

SQL Server, Table Variable tipinde bir tabloya yapılan bir sorgunun query plan’ını hesaplarken tabloda hiç kayıt yokmuş gibi düşünür ve query plan’ı buna göre hazırlar. Bu yüzden büyük verilerinizi Table Variable’a atarsanız performans sıkıntısı yaşarsınız. Büyük veriler için temp tablo kullanabilirsiniz.

Oluşturulduktan sonra Table Variable’ı alter edemezsiniz.

Table Variable üzerinde, SQL Server 2014 ‘ten önce Primary Key ve Unique Constraint’ler ile index oluşturuluyordu. Non unique bir index oluşturulamıyordu. SQL Server 2014 ile beraber non unique index’te aşağıdaki şekilde oluşturulabiliyor.

DECLARE @TableVariableTablo TABLE (
Kolon1 INT INDEX IX1 CLUSTERED,
Kolon2 INT INDEX IX2 NONCLUSTERED,
       INDEX IX3 NONCLUSTERED(Kolon1,Kolon2) /*Kolon1 ve Kolon2'yi içeren bir index*/
);

 

Temel olarak Table Variable ve Temp Tabloları aynı işi yaptığını düşünebilirsiniz. Fakat detaylı incelerseniz bir sürü farklılıkları olduğunu göreceksiniz.

Temp Tablo ve Table Variable Farkları” isimli makalemi göz atmak isteyebilirsiniz.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir