SQL Server 2012 RC1 sürümü yayınlandı. Bu sürümde dikkat çeken programatik öğelerden biri Sequence nesneleri tanımlayabilme özelliği. “Sequence” nesneleri, Veritabanı Yönetim Sistemlerinde otomatik artan sayılar üretmek üzere kullanılan nesnelerdir. “Sequence”,TDK(Türk Dil Kurumu) Bilişim Terimleri sözlüğüne göre sıra olarak karşılıklandırılmıştır. Silsile, ardışım gibi karşılıklar da bazı diğer yazarlar tarafından tercih edilmektedir. Sequence neseneleri, SQL Server’ın 2012 sürümü(V.11) ile gelen bir özellik olup aslında Oracle gibi diğer VTYS kullanıcılarınca yıllardır kullanılagelen bir nesne türüdür. Bu nesne türü, ANSI-SQL 2003 standardı ile tanımlanmıştır.
SQL Server 2012 RC1 sürümü yayınlandı. Bu sürümde dikkat çeken programatik öğelerden biri Sequence nesneleri tanımlayabilme özelliği. “Sequence” nesneleri, Veritabanı Yönetim Sistemlerinde otomatik artan sayılar üretmek üzere kullanılan nesnelerdir. “Sequence”,TDK(Türk Dil Kurumu) Bilişim Terimleri sözlüğüne göre sıra olarak karşılıklandırılmıştır. Silsile, ardışım gibi karşılıklar da bazı diğer yazarlar tarafından tercih edilmektedir. Sequence neseneleri, SQL Server’ın 2012 sürümü(V.11) ile gelen bir özellik olup aslında Oracle gibi diğer VTYS kullanıcılarınca yıllardır kullanılagelen bir nesne türüdür. Bu nesne türü, ANSI-SQL 2003 standardı ile tanımlanmıştır.
Bir çoklarınızın, “biz SQL Server ortamında yıllardır zaten otomatik artan sayıları(Identity column) başarıyla kullanıyorduk” dediğini tahmin ediyorum. Otomatik artan sayılar elbette Sequnce tarafından vaadedilen fonksiyonelliği sağlıyordu ama özellikle Oracle gibi VTYS’lerden SQL Server’a uygulama aktarmayı kolaylaştırmak ve performans artışı gibi nedenlerden dolayı, Sequence nesnelerine göz atmak fayda sağlayabilir.
Otomatik artan sayılarla yapılamayan ama sequence ile yapılabilecek bir işlevsellik olarak, birden fazla tablo için aynı alana girilecek değerlerin bir üreteçten gelmesi gereksinimi sayılabilir. Örneğin, ürünler ve üyeler hakkında yorum yapıldığını ve bu yorumların tbUrunYorum ve tbUyeYorum tablolarında tutulduğunu düşünelim. Üyeler için 1,2,3. Yorumlar yapıldığında, ürünler için bu sayıların kullanılmayıp sıradaki 4,5.. gibi değerlerin birincil anahtar olarak üretilmesi sequence nesneleri ile mümkün iken, otomatik artan sayılarla mümkün değildir.
Sequence’leri Tanımlamak ve Kullanmak
Sequence'lerin tanımlama ve kullanım şekilleri oldukça basit. Şayet Oracle dünyasından geliyorsanız, sequence'lerin işlevi konusunda kesinlikle fikir sahibi olduğunuzdan eminim ama SQL Server'da sequence tanımalama ve sayı üretme-okuma sentaksında çok ufak farklarla karşılaşmanız mümkün.
Bir örnek üstünden ilerleyelim:
Örnek:
-- veritabanını oluşturup kullanalım
CREATE DATABASE Dukkan
USE Dukkan;
-- Yorumların ekleneceği yorum tablosunu oluşturalım
CREATE TABLE tbYorum
(
yorumKod BIGINT PRIMARY KEY,
urunKod INT ,
yorumBaslik VARCHAR(255),
yorumAciklama VARCHAR(MAX),
);
/*
1 ile başlayıp birer birer artan bir
sequence nesnesini tanımlayalım:
*/
CREATE SEQUENCE sqnYorum AS BIGINT
START WITH 1
INCREMENT BY 1;
Tanımlamış olduğumuz sqnYorum Sequence nesnesi, birden başlayıp birer birer artan bir şekilde sayı üretecektir. Ancak sayı üretebilmesi için
NEXT VALUE FOR sqnYorum
ifadesini çağırmamız gerekecektir.
Arkasından tanımladığımız tabloya, sqnYorum sequence nesnesini kullanarak ürettiğimiz değerlerle 821 ve 825 numaralı ürünlere yorumlar ekleyelim:
USE Dukkan;
INSERT INTO tbYorum(yorumKod,urunKod,yorumBaslik)
VALUES(NEXT VALUE FOR sqnYorum,821,'Çok Güzel Bir Ürün');
INSERT INTO tbYorum(yorumKod,urunKod,yorumBaslik)
VALUES(NEXT VALUE FOR sqnYorum,825,'Çok Güzel Bir Ürün');
Arkasından sonuçları görelim:
SELECT * FROM tbUrun;
Şekil-1: Sequence nesnesinin tanımlanması ve kullanılması. Programmability altında Sequences alt düğümü, Management Studio 2012 ile gelen yeniliklerden biri.
Sequence’ler Hakkında Bilgi Almak ve Sequence'leri Yönetmek
Tanımlanmış sequence nesnelerinizi, Management Studio kullanarak üstünde çalıştığınız veritabanı altında, programmability düğümü altındaki Sequences düğümünden görüp, düzenleyebilirsiniz. Ayrıca tanımlı sequence'lerin bir listesini sys.sequences sistem view'ini sorgulayarak da görebilirsiniz.
Herhangi bir anda Sequence'in en son hangi sayıyı ürettiği RAM'de tutulur. Bütün tanımlı Sequence nesneleri ve son ürettikleri değeri sistem view'inden şu sorgu ile görüntüleyebiliriz:
SELECT name,current_value
FROM sys.sequences

Şekil-2: sys.sequences view'ini kullanarak tanımlı Sequence'lere ait üretilmiş son değeri görüntülemek
Normal şartlar altında, bir sequence'den sayı üretmesi istendiğinde, adına uygun olarak, ürettiği değerden bir sonraki değeri üretir. Ancak herhangi bir anda, Sequence'in üreteceği sıradaki sayıya müdahele etmek ALTER SEQUENCE ifadesi ile mümkündür:
Örnek:
sqnYorum sequence'inin artık 100'den itibaren değerler üretmesi isteniyorsa, ilgili değişikliği yapıp NEXT VALUE FOR sqnYorum ifadesini yeniden çağırıp sonucunu görelim:
ALTER SEQUENCE dbo.sqnYorum
RESTART WITH 100;
INSERT INTO tbYorum(yorumKod,urunKod,yorumBaslik)
VALUES(NEXT VALUE FOR sqnYorum,825,'Ürün işe yarıyor');
SELECT * FROM tbYorum;

Şekil-3: Sequence nesnesi herhangi bir değerden itibaren ilerlemek üzere set edilebilir.
Şayet bir sequence üretebileceği maksimum sayıyı üretirse ne yapacağını merak etmiş olabilirsiniz. İki seçenek var, ya sayı üretimini durdurabilir veya ilk değere geri dönebilir.
CREATE SEQUENCE sqnYorum AS TINYINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
NO MAXVALUE
CYCLE;
DİKKAT:
Dairesel bir sequence tanımlarken, baştan yeniden üretilen değerler birincil anahtar olarak kullanılıyorsa, birincil anahtar kısıtlayıcısına(PK Constraint) takılır. Sequence, sayı üretir. Tablonun bu sayıyı kabul edip etmeyeceği konusunda bir kesitirmde bulunamaz!
Sequence değerleri de otomatik artan sayılar gibi bir başarısız transaction içerisinde üretildiğinde bir sonraki sayıyı vererek devam edecektir.
Management Studio ile Sequence Yönetimi

Şekil-4:Management Studio ile bir Sequence'in yönetilmesi.
İPUCU:
Bir Sequence tamponlama seçeneği ile, belli sayıda üretilerek RAM bölgesinde tutularak, performans amaçlı önceden hazır hale getirilebilir. Böylece otomatik artan sayıya göre daha hızlı çalışan bir değer üreteci elde edilebilir.
Sonuç
Sequnce nesneleri SQL Server 2012 ile SQL Server programcılarının hayatına giren yeni bir nesne. Bu nesne özellike Oracle'dan geçişlerde ve bazı performans ayarlamalarında tercih edilebilir.