Aşağıdaki query ile 0 dan 10 a kadar sayan sonuç elde edebilirsiniz
declare @sayi as int = -1 declare @sonuc as nvarchar(max) = '' while @sayi < 10 begin set @sayi = @sayi + 1 set @sonuc = @sonuc + ' ' + cast(@sayi as nvarchar(max)) end print @sonuc
Geliştirdiğim bir erp projesi için sınırsız kategori özelliği lazım olmuştu, bu işi çözmenin en mantıklı yolunun sql olacağına karar verdim ve yazdım.
Kategori listesinin olduğu bir tablomuz olduğunu düşünelim. Sütun olarak kategoriid, kategoriismi ve bir de ustkategori isimli 3 adet sütunumuz olsun.
kategoriid: primary key olarak her kategorinin kendine özgü değer alacağı sütundur, int tipinde olacaktır.
kategoriismi: kategorinin ismini belirten sütundur, nvarchar tipinde olacaktır.
ustkategori: kategorinin herhangi bir kategorinin altı olduğu durumunda hangi kategorinin alt kategorisi olduğunu bu sütundan anlayacağız, eğer kategori alt kategori değilse bu sütun 0 değerini alacaktır, eğer bir alt kategoriyse alt kategorisi olduğu kategorinin id numarasını alacaktır.
Yukarıdaki örneğin uygulamasını içeren kod aşağıdadır.
with KTG as ( select kategoriid, CAST(kategoriismi as varchar(255)) as kategoriismi, ustkategori from tedarik_kategoriler where ustkategori = 0 union all select c.kategoriid, CAST(p.kategoriismi + ' -> ' + c.kategoriismi as varchar(255)), c.ustkategori from tedarik_kategoriler as c join KTG as p on p.kategoriid = c.ustkategori ) select * from KTG order by kategoriismi
Sorgunun çıktısı aşağıdaki gibi olacaktır:
Sınırsız kategori yapımını elimden geldiği kadarıyla anlatmaya çalıştım, yapamadığınız veya anlamadığınız yer olursa her zaman sorabilirsiniz

sql ile join işlemleri gerçekleştirebilmek için aşağıdaki örneği uygulayın.
Elimizde üç adet tablo olsun ve tablolar aşağıdaki gibi olsun
Tablo1: personel
Sütunları: personelid, adsoyad
Tablo2: departman
Sütunları: departmanid, departmantanimi
Tablo3: departmanindex
Sütunları: departmanindexid, departmanid, personelid
Yaptığımız her personel kaydı için ait olduğu departman bilgisini de çekeceğiz, ama bu departman bilgisini kayıt tekrarını önlemek için departman id si ile kaydedeceğiz, yani departman isimleri değil departmanların id numaraları tekrar edecek, bu sayede veritabanı hem daha organize bir şekilde oluşacak hem de kayıt tekrarı yüzünden şişmeyecek
Insert işlemini daha önce yaptığımızı düşünerek buna uygun select işlemi örneği aşağıdaki gibidir.
select personel.adsoyad, departman.departmantanimi from personel inner join departmanindex on departmanindex.departmanid = departman.departmanid left outer join departmanindex on departmanindex.personelid = personel.personelid
Bu şekilde veritabanından personel ad ve soyadı birinci sütunda, bağlı olduğu departman ikinci sütunda olacak şekilde bir kayıt döndürebiliriz.
İlk joinde departman isimlerini inner join ile departmanindex tablosuna bağladık.
İkinci joinde left outer join yerine inner join kullanmış olsaydık sadece departman bilgisi olan personeller karşımıza çıkacaktı, right outer join veya full join kullanmış olsaydık herhangi bir personele bağlı olmayan departmanlar da personel adı ve soyadınının bulunduğu sütun null fakat departman bilgisinin bulunduğu sütunda bilgi var olacak şekilde kayıt dönecekti.
Diğer tüm kodlama yöntemlerinde olduğu gibi bu yöntemi de en iyi öğrenme yolu verilen örneği uygulamaktır, aklınıza takılan bir soru olursa çekinmeden sorabilirsiniz.