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.

688 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!