Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Ekim 2017  >>
PaSaÇaPeCuCuPa
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
Keywords

Table dan table a veri aktarmanın oldukça fazla yöntemi vardır. Örneğin script ile, SSIS paketi ile, create script ile table dan table a veri aktarmak mümkündür.

Bugün kü yazımda bu aktarım çeşitlerinden script ile aktarım la alakalı olan 2 aktarım şekline bakacağız.

Ayrıca scriptle veri aktarım da eğer hedef table da identity kolon var ise özel bir durum oluşmaktadır. Bunuda inceliyor olacağız.

 

Birinci aktarım yönteminde her 2 table ın sistemde olduğu duruma bakıyor olacağız. Aşağıda script te bu aktarımın nasıl yapıldığına bakabilirsiniz.

create table table1(col1 int,col2 varchar(10))
GO
create table table2(col1 int,col2 varchar(10))
GO

insert table1
values (1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')
GO

--table 1 den veriler table 2 ye aktarılıyor.
insert table2
  select * from table1
GO

Select * from table2
GO

 

2.Aktarım modelinde ise hedef tablo sistemde bulunmuyor ve biz aktarım komutuyla aynı anda table ı create ederken aynı andada verileri taşıyoruz. Hedef table aktarılan bilgiler ne ise onların data type ları göz önünde bulundurularak create edilir. Bu aktarım script ine aşağıda erişebilirsiniz.

create table table3(col1 int,col2 varchar(10))
GO

insert table3
values (6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j')
GO

--table 4 create edilmemiş olmasına rağmen aşağıda aktarım script iyle hem create ediyoruz hemde dataları aktarıyoruz.
select * into table4 from table3
GO

Select * from table4
GO

 

Son olarak hedef tabloda eğer identity (otomatik artan) kolon varsa nasıl bir aktarım script i oluşturmalıyız bunu inceliyor olacağız.

Önce tabloları create edelim ve ilk tablonun içini dolduralım. Her 2 tablonun ilk kolonu identity yani otomatik artan olarak set edilmiş.

create table table5(col1 int identity,col2 varchar(10))
GO
create table table6(col1 int identity,col2 varchar(10))
GO

insert table5
values ('a'),('b'),('c'),('d'),('e')
GO

 

Identity kolonlara identity i off yapmadan kayıt insert edilemez. Edilmeye çalışıldığında aşağıdaki gibi bir hata alınır.

insert table6
  select * from table5
GO

 

Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'table6' can only be specified when a column list is used and IDENTITY_INSERT is ON.


Insert edebilmek için ya col1 insert listesinden çıkarılmalı yada table6 ın identity si off yapılmalıdır. Her 2 örneğede bakalım.

Col1 insert listesinden çıkarılır. Bu durumda hedef tablonun col1 i kendi sequence inde devam eder.

insert table6(col2)
  select col2 from table5
GO

Select * from table6
GO

 

Identity insert on yapılır. Bu durumda identity kolon kaynak tabloda olduğu gibi hedef tabloya atılır.

Delete from table6
GO

SET IDENTITY_INSERT table6 ON
insert table6(col1,col2)
  select col1,col2 from table5
SET IDENTITY_INSERT table6 OFF
GO

Select * from table6
GO

 

İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server daki bir tablonun içindeki verilerden insert script i oluşturup bu script i başka datalar üzerinde execute etme ihtiyacımız doğabilir.

Örneğin table kopyalama işlemi yapmak istiyorsunuz. Eğer 2 server aynı local bölgede ise sadece bir insert komutuyla bir table ı diğer bir table a kopyabilirsiniz. Ama 2 server aynı anda erişebilecek durumda değil ise source table dan insert script i oluşturup destination table ın olduğu serverda execute etmeniz gerekmektedir.

SQL 2000 ve SQL 2005 de bu işlemin direk enterprise üzerinden yapılması mümkün değildi. Bunu yapabilmek için ayrı bir executable oluşturulması ve veritabanın üzerinde çalıştırılması gerekiyordu.

SQL 2008 ile gelen script database ek özelliği sayesinde bu işlemi kolayca yapmamız mümkün.

Şimdi bu işlemi nasıl yapabileceğimize bakalım.


Management Studio da AdventureWorks2008 veritabanına sağ tıklayıp Tasks >> Generate Scripts bölümüne geliyoruz.

Açılan ekranda next yapıp gelen ekranda çalışmak istediğimiz veritabanını seçiyoruz. Yani bu örnek için AdventureWorks2008.

Next e tıklayınca karşımıza aşağıdaki gibi bir ekran gelecektir.

gs1

Bu ekranda Table ın create komutu bizim için önemli olmadığı için Script Create kısmını false yapıyoruz. Datalar için insert script i oluşturmak içinde Script Data kısmını True yapıyoruz.

Next e tıklayıp gelen ekranda Tables seçeneğini seçip next e basıyoruz.

gs2

Gelen ekranda hangi table lar için insert script oluşturmak istiyorsak onları seçip next e basıyoruz.

gs3

Bir sonraki gelen bu ekranda script in nereye oluşturulacağını seçiyoruz. “Script to New Query Window” seçeneğini seçip next e basalım.

Son gelen summary ekranında finish e bastığımızda insert script i Management Studio da yeni bir Query Window halinde kullanılmaya hazırdır.

gs4

Eğer sadece bir table üzerinden insert script oluşturulmak isteniyorsa direk table üzerinde sağ klik yapıp gitmek daha hızlı olacaktır.

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan