arkadaşlar elimde 2 farklı mssql server ve bunlar üzerinde yer alan 2 farklı veritabanı var. 1.serverde yeralan veritabanındaki bir tablodan bilgiyi okuyup diğer serverde yer alan 2. veritabanındaki bir tabloya sql komutu ile nasıl veri aktarılabilir.
Acil yardıma ihtiyacım var
2 farklı mssql server arasında veri aktarımı
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: 2 farklı mssql server arasında veri aktarımı
Aynı cevabı buradan da verelim
. Bunun için 2 yol önerebilirim. Öncelikle örneklerin,
Server adı olarak DIGERSERVER (eğer instancename varsa DIGERSERVER\INSTANCENAME olarak ele alınabilir),
Bağlantı kuran kullanıcı adı olarak sa sql kullanıcısı,
bu sql kullanıcı şifresinin de SiFRE,
bağlanılacak veritabanı adı olarak HASTANE veritabanı ve
buradaki HASTALAR tablosu olduğunu var sayarak örneklediğimi belirtmeliyim.
-sp_addlinkedserver ve sp_addlinkedsrvlogin komutları ile diğer sql server mevcut sisteme server olarak eklenir ve diğer server ismi kullanarak sorgulama yapma imkanı doğmuş olur.artık diğer server kayıt edilmiş durumdadır. Oradaki veritabanlarını select * from [SERVER_ADI].[DB ADI].[OWNER].[TABLO] yapısıyla elde edebiliriz. Bir kaç örnek..: şeklinde sorgularla sorgulayabiliriz.
---------------------------------------------------------------
-Önereceğim 2. yolda ise OPENDATASOURCE veya OPENROWSET fonksiyonları ile server kaydetmeye gerek kalmadan direkt veri çekmeyi sağlayan kodlar olacak. Tabi bu 2 fonksiyon sadece SQL Server değil tüm ODBC veya OLE DB Provider bağlantılarını desteklediği için diğer ortamlardan (Access, Excel, ... sürücüsü yüklü olan diğer veritabanları) veri çekebilmektedir.
OPENDATASOURCE örneği..:
OPENROWSET örneği..:
---------------------------------------------------------------
Artık insert into sorgusunda yukarıdaki gibi select sorgu kullanarak diğer taraftan kayıt getirebilirsiniz.veyaveya gibi örnekler çoğaltılabilir.
Uyarmak gerekirse burada bilgi çekmek için yapılan ilk bağlantılarda biraz fazla bekleme olabilir ama daha sonraki işlemlerde bir kere bağlantı sağlandığı için bu ilk bağlantıdaki gibi yavaşlık söz konusu olmayacaktır.

Server adı olarak DIGERSERVER (eğer instancename varsa DIGERSERVER\INSTANCENAME olarak ele alınabilir),
Bağlantı kuran kullanıcı adı olarak sa sql kullanıcısı,
bu sql kullanıcı şifresinin de SiFRE,
bağlanılacak veritabanı adı olarak HASTANE veritabanı ve
buradaki HASTALAR tablosu olduğunu var sayarak örneklediğimi belirtmeliyim.
-sp_addlinkedserver ve sp_addlinkedsrvlogin komutları ile diğer sql server mevcut sisteme server olarak eklenir ve diğer server ismi kullanarak sorgulama yapma imkanı doğmuş olur.
Kod: Tümünü seç
exec sp_addlinkedserver @server='KENDIM_DIGERSERVERA_AD_VERDIM', @srvproduct='', @provider='SQLOLEDB', @datasrc='DIGERSERVER'
exec sp_addlinkedsrvlogin 'KENDIM_DIGERSERVERA_AD_VERDIM', 'False', Null, 'sa', 'SiFRE'
Kod: Tümünü seç
select * from KENDIM_DIGERSERVERA_AD_VERDIM.master.dbo.sysdatabases
select * from KENDIM_DIGERSERVERA_AD_VERDIM.HASTANE.dbo.HASTALAR
---------------------------------------------------------------
-Önereceğim 2. yolda ise OPENDATASOURCE veya OPENROWSET fonksiyonları ile server kaydetmeye gerek kalmadan direkt veri çekmeyi sağlayan kodlar olacak. Tabi bu 2 fonksiyon sadece SQL Server değil tüm ODBC veya OLE DB Provider bağlantılarını desteklediği için diğer ortamlardan (Access, Excel, ... sürücüsü yüklü olan diğer veritabanları) veri çekebilmektedir.
OPENDATASOURCE örneği..:
Kod: Tümünü seç
select * from OPENDATASOURCE('SQLOLEDB','Data Source=DIGERSERVER;User ID=sa;Password=SiFRE').master.dbo.sysdatabases
select * from OPENDATASOURCE('SQLOLEDB','Data Source=DIGERSERVER;User ID=sa;Password=SiFRE').HASTANE.dbo.HASTALAR
Kod: Tümünü seç
select * from OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=DIGERSERVER;UID=sa;PWD=SiFRE',master.dbo.sysdatabases) AS tbl
select * from OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=DIGERSERVER;UID=sa;PWD=SiFRE',HASTANE.dbo.HASTALAR) AS tbl
Artık insert into sorgusunda yukarıdaki gibi select sorgu kullanarak diğer taraftan kayıt getirebilirsiniz.
Kod: Tümünü seç
insert into HASTALAR (Ad, Soyad)
select Ad, Soyad from KENDIM_DIGERSERVERA_AD_VERDIM.HASTANE.dbo.HASTALAR
Kod: Tümünü seç
insert into HASTALAR (Ad, Soyad)
select Ad, Soyad from OPENDATASOURCE('SQLOLEDB','Data Source=DIGERSERVER;User ID=sa;Password=SiFRE').HASTANE.dbo.HASTALAR
Kod: Tümünü seç
insert into HASTALAR (Ad, Soyad)
select Ad, Soyad from OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=DIGERSERVER;UID=sa;PWD=SiFRE',HASTANE.dbo.HASTALAR) AS tablo
Uyarmak gerekirse burada bilgi çekmek için yapılan ilk bağlantılarda biraz fazla bekleme olabilir ama daha sonraki işlemlerde bir kere bağlantı sağlandığı için bu ilk bağlantıdaki gibi yavaşlık söz konusu olmayacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .