SQL Server da Tablolar Arası Veri Transferi

SQL SELECT INTO - INTO SELECT


Arkadaşlar merhaba bu yazımız da sql server da, sql komutlarıyla veri transferi konusuna bakacağız.

Bilindiği gibi sql serverda veri taşımanın bir çok yolu var bunların en çok kullanılanları şüphesiz Management Studio nun export/import araçlarıdır.

Ama biz bugün daha öncede bahsettiğim gibi sql scriptleriyle halledebilmenin yollarına bakacağız.
Evet bunun için iki şekilde yapabiliriz
Önce kendimize tablo oluşturarak işe başlayalım.

CREATE TABLE [dbo].[Musteri](
[id] [int] IDENTITY(1,1) NOT NULL,
[Adi] [varchar](50) NULL,
[Soyadi] [varchar](50) NULL,
[Telefon] [varchar](20) NULL
) ON [PRIMARY]

Tablomuzu oluşturduk sıra veri girmeye geldi.

INSERT INTO [dbo].[Musteri] ([Adi],[Soyadi],[Telefon])
VALUES ('Ahmet','CAN','0532988888')

Siz dilediğiniz sayıda kayıt ekleyebilirsiniz.

Şimdi hazırlıklar tamamlandığına göre data transferine başlayabiliriz.

I. Yöntem:
SELECT * INTO Yeni_Musteri FROM Musteri

Bu yöntem de Musteri tablosunda ki kayıları select eder ve Yeni_Musteri adında yeni bir tablo oluşturur ve select ten gelen veriyi insert eder.

Burada SELECT işlemi bildiğimiz sorgulama işlemidir. Belli kriterlere sahip veriyi aktarmak isteyebilirsiniz bunun için WHERE yazmamız yeterli olacaktır.

II. Yöntem:

INSERT Yeni_Musteri2 (Musteri_Adi, Musteri_Soyadi)  SELECT Adi,Soyadi FROM [Musteri] 

Bu yöntemde de zaten var olan bir tablonun içine belli alanları eşleyerek insert yapıyoruz. Yine Select kısmına filtre uygulayabiliriz.
 Burada dikkat edilecek bir husus var.  Eşleştirilecek kolonlar aynı sırayla yazılması gerekiyor yani kaynak alan ve hedef alan aynı sırada olmalı. 

Diğer bir önemli noktada; dikkat ederseniz biz bu yöntemde ID alanlarını taşımadık. Bildiğiniz gibi IDENTITY alanlara kayıt yapamıyor ve düzenleyemiyoruz. 
Peki ID numaralarıyla birlikte taşımak istersek ne yapmamız gerekiyor?

Çözüm:

IDENTITY alanlarının müdahaleye açık hale getiriyoruz.

SET IDENTITY_INSERT Yeni_Musteri2 ON 
            INSERT Yeni_Musteri2 (ID, Musteri_Adi,Musteri_Soyadi)  SELECT ID, Adi,Soyadi  FROM [Musteri] 
SET IDENTITY_INSERT Yeni_Musteri2 OFF


Son olarak bir tavsiye de bulunmak istiyorum. Bu transfer işlemlerinde transaction çalıştırarak yapın. Bir sıkıntı oluşacak olursa uzun aktarım işlemi tekrardan yapmak zorunda kalmazsınız ve veri tutarlılığını korumuş olursunuz. Transaction konusunu da ayrıca ele almayı düşünüyorum.

Faydalı olması dileğiyle.