Yazılım

Sql’de farklı veritabanından kolon kopyalama

EYLÜL 28, 2011

(Başlık olmadı sanki.. Neyse bunla idare edelim.)
Stajdayken sürekli sql’le boğuşuyordum ve sqlde cursor kullanımını çok sevdim. Belki komik gelebilir ama dillerin kendi özgü özelliklerinden sevdiğim komutlar, fonksiyonlar vardır, heryerde onları kullanmak isterim. Sqldeki cursor deyimi de onlardan.
Problemimiz şu olsun diyelim: Yeni bir database oluşturdunuz ve eski bir databaseden tablodaki satırları biraz değişiklik yaparak tamamını almak istiyorsunuz.Cursorla nasıl yapılır onu anlatacam. Problem başka bir yöntemle de yapılabilir tabi.
Diyelim ki elimizde personel_Tablosu_Eski adında bir database var ve Personel adında tablosu olsun. Bu tabloda da ID, AD, SOYAD ve kişinin aktif çalışan olup olmadığını belirten ACTIVE butonu olsun. Yeni bir database oluşturdunuz ve adı Personel_Tablosu_Yeni olsun. Bunun da Personel diye bir tablosu var ve tabloda ID, AD ve Active kolonları var. Eski veritabanınızdaki aktif çalışanları, AD ve SOYAD, iki kolonu birleştirip yeni veritabanınızdaki AD kolonuna yerleştirmek istiyorsunuz. Bu durumda yazcağınız cursor şu şekilde olmalı:
DECLARE @Ad NVARCHAR(50)
DECLARE @Soyad NVARCHAR(50)
Declare curs cursor
FOR
SELECT [AD],[SOYAD] FROM personel_Tablosu_Eski.dbo.[Personel] WHERE ACTIVE=1
OPEN curs

FETCH NEXT FROM curs INTO @Ad,@Soyad;

WHILE @@FETCH_STATUS = 0
BEGIN


INSERT INTO Personel_Tablosu_Yeni.dbo.Personel(AD,ACTIVE)
VALUES((select @Ad + SPACE(1) + @Soyad),1)

FETCH NEXT FROM curs INTO @Ad,@Soyad;
END

CLOSE curs
DEALLOCATE curs

Kodları kısa açıklayacak olursak,

Öncelikle yeni tablomuza ekleyeceğimiz ya da üzerinde değişiklik yapacağımız kolonlar için değişken tanımlıyoruz.

DECLARE @Ad NVARCHAR(50)

DECLARE @Soyad NVARCHAR(50)

Daha sonra curs adında bir cursor tanımladık ve cursor for deyiminden sonra cursor’ımızın ACTIVE’i 1’e eşit olanların AD’ı ve SOYAD’ı için çalışcağını belirledik.

OPEN curs diyerek bellekte cursor’ımıziçin yer ayırdık ve işlemlerimizi yapmak için açtık.

FETCH NEXT deyimi tek bir kaydı alır ve cursora yükler. Burda @Ad ve @Soyad değişkenlerin sırası önemli select sorgusunda alırken hangi sırayla alıyorsak onlara karşılık gelmeli.

@@FETCH_STATUS ifadesi döngünün kontrol birimidir. WHILE @@FETCH_STATUS = 0 ifadesi ile hata olmadığı sürece bir sonraki kayıt elde edilir.

insert into komutu ile yeni tablonun ad kolonuna, eski tablodaki ad ve soyadı birleştirerek ekledik.

En sonunda da cursorımızı kapattık ve DEALLOCATE ile kullandığımız bellek alanını boşalttık.

Cursor’ın kullanımı hakkında daha fazla bilgi için şu sayfaya bakabilirsiniz: İtü - Cursor Kullanımı

Mustafa Şimşek 30.9.2011
Güzel bir çalışma olmuş ,

script kullanarak da aynı işlemi daha kolay ve herhangi bir kod yazmadan yapabiliriz istersek.

kolay gelsin ilknur :)
ilknur 30.9.2011
Öğrenme aşamasında olunca en amele işlemlerden bile kaçınmıyorum :)
Teşekkürler :)
nazlı gündoğdu 18.1.2012
çok faydalı bir makale olmuş devamını bekliyoruz teşekkürler ilknur hanım

POPÜLER İÇERİK

C/C++ da oyun yazmak ya da grafik kütüphanesiyle ilgili birşeyler yapmak istiyorsanız: Öncelikle iki dosyaya ihtiyacınız var bunlardan biri libbgi.a dosyası buradan indiriniz. Diğer graphics.h dosyasını ise buradan indiriniz.

OCAK 24, 2011 - 78 YORUM

Dev-C++ Derleyicisine graphics.h Kütüphanesini Ekleme