Anasayfa / Yazılım / SQL / Bir Tablodan Başka Bir Tabloya Veri Aktarımı

Bir Tablodan Başka Bir Tabloya Veri Aktarımı

Bu yazımda mevcut olan tablolar arası birbirlerine veri eklemekten bahsedeceğim. Çok sık başvurulan bir işlemdir. Örneğin diyelim ki bir veritabanında urunler ve depo tablosu mevcut. Urunler tablosundaki verileri depo tablosunda da yazmam gerekiyor. İşte bu gibi durumda tablolar arası veri aktarımı yapma ihtiyacı duyarız. Çünkü aynı verilerin aktarımında satırlarca veriyi yeniden girmek veya tek tek eklemek çok mantıklı değildir. Aynı verileri bu şekilde kopyalamak çok daha mantıklı olmaktadır. Hızlı ve etkili bir çözümdür.

Hemen örnekleyelim. AdventureWorks2012 veri tabanı üzerinde çalışıyorum.

INSERT INTO dbo.MusteriDemo (MusteriID, Ad, IkinciAd, Soyad)
SELECT BusinessEntityID, FirstName, MiddleName, LastName
FROM Person.Person WHERE BusinessEntityID BETWEEN 31 AND 40;

Person.Person tablosunda BusinessEntityID değeri 31 ve 40 dail olmak üzerinde bunların arasında olan satırların BusinessEntityID, FirstName, MiddleName ve LastName alanlarını daha önceden oluşturduğum MusteriDemo tablosundaki MusteriID, Ad, IkinciAd ve Soyad alanlarına sırası ile ekliyorum. Yani kopyalıyorum aslında. Bu sorgu sonucunda 10 satır eklendi.

Şimdi bakalım bu eklediğimiz satırlar hangisi imiş?

SELECT * FROM Person.Person WHERE BusinessEntityID BETWEEN 31 AND 40;

2013040212

Şimdi buradaki BusinessEntityID, FirstName, MiddleName, LastName alanlarını ben kopyaladım. Bir bakalım cidden kopyalanmış mı?

SELECT * FROM MusteriDemo WHERE MusteriID BETWEEN 31 AND 40;

2013040213

Görüleceği üzere ekleme işlemi gerçekleşmiş.

Şimdi bir örnek daha yapalım. Bu örneğimde ben Person.Person ve Sales.SalesOrderHeader tablolarını birleştiriyorum. Ve bu birleşimde farklı BusinessEntityID değeri ile SalesPersonID değeri farklı olanları ben MusteriDemo tabloma aktarmak istiyorum. Bunun için sorgum şu şekilde.

INSERT INTO dbo.MusteriDemo (MusteriID, Ad, IkinciAd, Soyad)
SELECT DISTINCT Musteri.BusinessEntityID, Musteri.FirstName, Musteri.MiddleName, 
Musteri.LastName FROM Person.Person AS Musteri INNER JOIN Sales.SalesOrderHeader
AS Satis ON Musteri.BusinessEntityID = Satis.SalesPersonID;

Bunun sonucunda 17 satır veri kaydedildi diye bilgi alıyorum. Bir bakalım bu iki tablo arasındaki fark cidden kaçmış?

SELECT DISTINCT Musteri.BusinessEntityID, Musteri.FirstName, Musteri.MiddleName, 
Musteri.LastName FROM Person.Person AS Musteri INNER JOIN Sales.SalesOrderHeader
AS Satis ON Musteri.BusinessEntityID = Satis.SalesPersonID;

2013040214

Cidden 17 farklı var. Peki bunlar tablomuza eklenmiş mi bir bakalım?

SELECT * FROM MusteriDemo WHERE MusteriID > 40;

2013040216

3 yorum

  1. Merhabalar İsmail bey,

    Benim yapmak istediğim farklı isimlerde fakat aynı yapıda iki veri tabanı arasında insert işlemi yapmak istiyorum bu noktada bunu nasıl yapabilirim. Script’ini almadan sql kodlarıyla yapma imkanım var mı bunu.

  2. Yani tabiri caizse biraz saçma olacak ama aşağıdaki gibi birşey yapmam mümkün mü?

    USE XDB
    GO
    INSERT INTO dbo.Xdeneme (id, adi, soyadi)
    USE YDB
    GO
    SELECT id,adi, soyadi FROM Xdeneme

  3. Ben yapıyorum.
    Fakat ilk önce ikinci kaydı alıyor sonra diğerlerini alıyor.
    order ID ile işlem yapmıyor.

    Neden olabilir.

Bir cevap yazın

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