TSQL ile Belirli bir Sayi veya Tarih Araliginda Bir Seri Üretmek

TSQL de With kullanarak belirli sayida elemani olan bir seri olusturabilirsiniz. Örnegin 1 den baslayarak 1000’e kadar olan integer sayilardan olusan bir seri olusturmak istiyorsaniz asagidaki scripti kullanabilirsiniz

 

Integer-Serisi

WITH T(ID) AS
(
    SELECT 1 ID
    UNION ALL SELECT ID + 1
    FROM T
    WHERE ID < 1000
)
SELECT * FROM T
OPTION (MAXRECURSION 1000)

.

Eger bir tarihten baslayarak belirli bir tarihe kadar olan tüm günleri barindiran bir seri olusturmak istersek bu sefer asagidaki gibi bir script kullanmamiz gerekir.

Asagidaki script 2011.01.01 tarihinden itibaren tarihe 1 gün ekleyerek bugune kadar tüm tarihleri olusturur. maxrecursion 1000 diyerek ise en fazla 1000 tane olustur demis oluyoruz. 2011.01.01 den günümüze(2012.10.05) yaklasik 645 gün oldugu için max recursion sayisina ulasamayiz. Eger bu degeri düzgn vermez isek asagidaki hatayi aliriz.

Msg 530, Level 16, State 1, Line 1
The statement terminated. The maximum recursion 1000 has been exhausted before statement completion.

Iki Tarih Arasindaki tüm Günler için Seri Olusturmak

WITH T(Date) AS
(
    SELECT CONVERT(datetime, '20110101') Date
    UNION ALL 
    SELECT DATEADD(dd, 1, Date)
    FROM T
    WHERE Date < GETDATE()
)
SELECT * FROM T
OPTION (MAXRECURSION 1000)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir