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
eb483864-c7a4-4f6a-8537-5bc3b86ac264|2|5.0