SQL Server’da Nested Cursor Kullanarak Başka Bir Tabloya Insert Yapmak
Herkese merhaba,
Bu yazıda SQL Server’da Nested Cursor kullanarak başka bir tabloya insert yapma işleminden bahsedeceğim.
SQL Server’da ilişkili iki tablo arasındaki verileri başka bir tabloya nasıl insert edebiliriz, bu işlemi yaparken istediğimiz alanları nasıl çekebiliriz?
Bu makalenin içeriğinde bu soruların cevaplarını bulacaksınız.
Konu hakkında ki örnek çalışmayı Northwind veritabanını kullanarak yapalım.
CREATE TABLE [dbo].[Urunler]( [id] [INT] IDENTITY(1,1) NOT NULL, [ad] [NVARCHAR](100) NULL, [uad] [NVARCHAR](100) NULL, [miktar] [NVARCHAR](100) NULL) --Kategori tablosunu inceleyelim. SELECT * FROM dbo.Categories --Ürünler tablosunu inceleyelim. SELECT * FROM dbo.Products --Gerekli değişkenlerimizi tanımlıyoruz. DECLARE @kategoriid INT DECLARE @kategoriad NVARCHAR(100) DECLARE @urunadi NVARCHAR(100) DECLARE @birimmiktar INT --İlk cursor yapımızı oluşturuyoruz. Bu cursor kategoriid ve kategoriad değerlerini çekecek. DECLARE crs1 CURSOR FOR SELECT CategoryID,CategoryName FROM dbo.Categories OPEN crs1 FETCH NEXT FROM crs1 INTO @kategoriid,@kategoriad WHILE @@FETCH_STATUS=0 BEGIN --İkinci cursor yapımızı oluşturuyoruz. Bu cursor ise ürünadi ve birimmiktar değerlerini çekecek. DECLARE crs2 CURSOR FOR SELECT ProductName,UnitsInStock FROM dbo.Products WHERE CategoryID=@kategoriid OPEN crs2 FETCH NEXT FROM crs2 INTO @urunadi,@birimmiktar WHILE @@FETCH_STATUS=0 BEGIN Gelen değerleri Urunler tablosuna insert ediyoruz. INSERT INTO Urunler( ad, uad, miktar ) VALUES ( @kategoriad,@urunadi, @birimmiktar) FETCH NEXT FROM crs2 INTO @urunadi,@birimmiktar END --İlk önce içteki cursor sonra da dıştaki cursorumuzu kapatıyoruz. CLOSE crs2 DEALLOCATE crs2 FETCH NEXT FROM crs1 INTO @kategoriid,@kategoriad END CLOSE crs1 DEALLOCATE crs1 --İşlem bitince tablomuzu kontrol ediyoruz. SELECT * FROM urunler
Yukarıdaki işlemlerde en önemli nokta döngüdür. Her ikisinde de kategoriid kısmı ortak kısımdır. Bizim en dıştaki tablomuz bu yüzden kategoriler tablosu oldu. Çünkü buradaki her değer standarttır ve tektir. Ürünler tablosunda bir ürün için bir kategori tanımlayabiliriz. İki farklı ürün için aynı kategoriyi tanımlayabildiğimiz gibi farklı kategori de tanımlayabiliriz. Products tablosu böyle bir tablodur. Umarım anlaşılır olmuştur.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.