Sequence nedir ve nasıl oluşturulur

27 Oca by NURULLAH ÇAKIR

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

Loading

Bir yanıt yazın

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