Sequence nedir ve nasıl oluşturulur
Sequence SQL Server’daki identity mantığına benzer tablo bağımsız bir yapıdır. Üretilen sequence’i birden fazla tabloda kullanabilirsiniz. Identity ile ilgili detaylı bilgi almak için “Identitiy column ve manual olarak bu kolona insert yapmak(Identitiy insert)” isimli makaleme göz atmak isteyebilirsiniz.
Sequence ile belirli değerler arasında numeric ve sıralı sayılar üretilir. Birden fazla tabloda aynı sequence’i kullanarak farklı tablolar için birbirini takip eden sayılar üretilebilir.
Sequence’i daha yakından tanımak için bir örnek üzerinden gitmek daha doğru olacaktır. Örneğin aşağıdaki örnekte;
SeqOrnek isminde,
Integer tipinde,
1 değerinden başlayan,
1 er 1 er artan,
Minimum değeri 1 olan,
Maksimum değeri 99 olan,
99 değerine ulaştığında yeniden 1 değerinden başlamayan,
Ve sequence’e ait sayıları cache’de tutmayan bir sequence oluşturuyoruz.
NO CACHE yerine CACHE 30 deseydik 1 den 30’a kadar olan sayıları cache’e alacaktı ve 30’a geldiğinde 30’dan 60’a kadar olan sayıları tekrar cache’e alacaktı. Daha az IO yapmak için CACHE değeri vermek performans açısından iyi gibi gözüksede performansı gözle görülebilir derecede artırmadığı görülmekle birlikte, sunucu beklenmedik şekilde kapanırsa cache’de sayıların kaybolmasına yol açabilir.
CREATE SEQUENCE SeqOrnek AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99 NO CYCLE NO CACHE;
Sequence’i oluşturduktan sonra kullanmaya başlayalım.
Tablo oluştururken aşağıdaki şekilde kullanabiliriz.
CREATE TABLE SeqTable ( ID int not null CONSTRAINT seqconst DEFAULT NEXT value FOR SeqOrnek, sehir varchar(20) not null )
Ya da mevcut bir tabloya aşağıdaki şekilde ekleyebiliriz.
ALTER TABLE SeqTable ADD CONSTRAINT seqconst DEFAULT NEXT value FOR SeqOrnek FOR ID
Yada tabloya eklemeyip insert cümleciğinin içinde bu değeri sequence’den alabiliriz.
INSERT INTO [dbo].[SeqTable] ([ID],[sehir]) VALUES (NEXT VALUE FOR SeqOrnek,'ANKARA') INSERT INTO [dbo].[SeqTable] ([ID],[sehir]) VALUES (NEXT VALUE FOR SeqOrnek,'İSTANBUL')
Sequence’i ALTER ederek belli bir değerden sonra başlaması için yeniden programlayabiliriz.
ALTER SEQUENCE SeqOrnek RESTART WITH 70;
Üçüncü kaydımızı ekleyecek insert’ü yapıp tablodan bir select çekip sequence’den gelen ID değerlerini görelim.
INSERT INTO [dbo].[SeqTable] ([ID],[sehir]) VALUES (NEXT VALUE FOR SeqOrnek,'İZMİR') Select * FROM [dbo].[SeqTable]
Gördüğünüz gibi 70’den başlayacak şekilde sequence’i yeniden programladıktan sonra İZMİR kaydını eklediğimiz için İZMİR’in ID değeri 70 oldu.
Var olan sequence’leri aşağıdaki şekilde görebilirsiniz.
SELECT name,current_value FROM sys.sequences