SQL SERVER Computed Column Özelliği
SQL Server‘da Computed Column özelliği tabloda var olan verileri kullanarak yeni bir kolon türetmek için kullanılır. Örneğin; Siparişlerin tutulduğu bir tablo olduğunu varsayalım. Tablomuzda adet ve ürün tutarı tutulmuş olsun. Biz tablomuzda toplam tutar alanına ihtiyacımız olduğunu varsayacak olursak; Toplam Tutar=Adet*Ürün Tutarı olarak hesaplanacaktır.
İhtiyacımız olan alanı hesaplamak için iki farklı yöntem kullanabiliriz. İlk yöntemde “toptam tutar” kolonunu normal bir tabloya kolon ekler gibi ekledikten sonra uygulama katmanında “toplam tutar” değerini hesaplatıp tabloya gönderebiliriz. İkinci yöntemde ise SQL SERVER tarafında kullanabileceğimiz güzel bir özellik olan Computed (Hesaplanmış) kolon özelliğini kullanarak her kayıt eklendiğinde SQL Server tarafından otomatik olarak hesaplanıp bu kolona değeri işleyebiliriz. Konuyu örnek üzerinden inceleyelim.
Sipariş bilgilerinin tutulacağı bir tablo oluşturalım;
[sql]
CREATE TABLE CustomerOrders
(
OrderID INT IDENTITY(1,1),
CustomerID INT,
Qty INT,
Price DECIMAL(18,2)
)
[/sql]
Yukarıdaki script yardımı ile tablomuzu oluşturmuş olduk. Tablomuza toplam tutar bilgisinin Computed Column olarak tutulması için “Amount” isminde hesaplanmış kolon tanımlıyoruz.
[sql]
ALTER TABLE CustomerOrders
ADD Amount AS Price*Qty
[/sql]
Yukarıdaki t-sql sorgusunda da görüldüğü gibi tabloya normal bir kolon dahil eder gibi kullanıyoruz ancak veri tipi belirtmek yerine “AS” ifadesi ile hesaplama için kullanılacak formülü belirtiyoruz.
Dikkat: SQL Server’da Computed Column ile oluşturulan kolonlar fiziksel olarak diskte yer kaplamazlar. Ancak hesaplanmış kolonların diskte yer tutmasını fiziksel olarak diske yazılmasını istiyorsanız; “PERSISTED” ifadesini kullabilirsiniz. Yukarıdaki sorguda “PERSISTED” kullanılmadığı için hesaplanan kolon diskte yer tutmayacaktır. “PERSISTED” seçeneğini kullanmak isterseniz sorguyu aşağıdaki gibi düzenlemeniz gerekmektedir.
[sql]
ALTER TABLE CustomerOrders
ADD Amount AS Price*Qty PERSISTED
[/sql]
Computed Column olarak oluşturulan alanlar yukarıdaki resimde görüldüğün gibi normal kolon simgesi ile birlikte hesap makinesi simgesi ile temsil edilmektedir.
PERSISTED özelliğini ne zaman kullanmalıyım? diye bir soru aklınıza gelebilir. Eğer verilerinizin diske yazılmasını istiyorsanız ve hesaplanmış kolon üzerinde INDEX tanımlamanız gerekiyorsa “persisted” özelliğini kullanmalısınız.
[sql]
INSERT INTO CustomerOrders VALUES (1,3,24.50),(1,5,25),(2,2,100)
[/sql]
Computed Column özelliğini test etmek için yukarıdaki script yardımı ile tabloma 3 tane kayıt ekliyorum.
Eklemiş olduğum kayıtları sorguladığımda “Amount” kolonundaki verilerin benim belirttiğim formüldeki gibi hesaplandığını görüyorum.
Faydalı olması dileğiyle.