Merhaba,
Bu yazımız içinde serverlar arası veri transferini temp tabloları kullanarak nasıl yapacağımızdan bahsediyor olacağız.
Senaryomuz 1.kısmı şu şekilde olacak; .NET platformundan çağırılan SP ler sayesinde verilerin ekrana basıldığını ve bu çağırılan SP nin kendi içinde de başka bir SP yi çağırdığını varsayalım.Aynı zamanda yeni bir kullanıcı olduğunuzu ve dolayısıyla henüz SP leri direkt olarak veritabanında çalıştırma yetkinizin olmadığını da varsayalım. Hatta durumu daha da kötüleştirip çağırılan SP ile onun çağırdığı SP nin ayrı server lar üzerinde olduğunu da varsayalım.Biraz daha kötüleştirip tablo create etme hakkınızında olmadığını varsayalım ki direkt olarak linked server kullanılmasın 🙂
2.kısmı ise ; İşe yeni başladınız fakat çözmeniz gereken bir problem var.Senaryomuzun 1.kısmına göre de bir disaster recovery havasında giriş yaptık,problemin çözümü için ise bir high availability imiz var evet 🙂
.NET platformunun çağırdığı SP için -> SProc1
SProc1 ın çağırdığı SP için de -> Sproc2 isimlerini kullanıyor olalım.
İlk olarak aklımıza gelen SProc1 den gelecek olan verileri alabilmek ve hatanın nereden kaynaklandığını çözebilmek için sp nin aldığı parametreleri hemen alt satırında SET edip,ALTER PROCEDURE SProc1 ve AS satırlarını yorum içine alıp f5 e basmak tabiki..Fakat burada da şu sorun devreye giriyor ; scriptin içinde
“Insert into #tempCustomer exec [link_BESIKTAS].[NORTHWND].[dbo].SProc2 @CustomerId ” gibi bir satır var ve bizim de SP çalıştırmaya yetkimiz yok.
Eğer SProc2 nin bulunduğu servera kurulmuş linked server bağlantısı varsa ve bu bağlantıyı kullanmaya iznimiz varsa SProc2 içindeki scripti alıp SProc1 içine yazıp linked server bağlantılarını da ekleyip çalıştırabiliriz,fakat bu bize zaman kaybettirebilir hemde SProc2 de veri son olarak temp tabloya basılıyorsa veriyi yine çağıramazsınız;

Özellikle SP lerin çok satırlı ve de birden çok tabloya hatta veritabanına gidebileceğini varsayarsak.
Bizim bu noktada yapacağımız şey ise çok basit bir yöntem olacak. SProc2 nin içindeki (sözde) scripti parametrelerini verdikten sonra çalıştırıp global bir temp içine atıyoruz ;

Daha sonra da doldurduğumuz bu temp tabloyu Ad hoc distributed üzerinden çekiyor olacağız;

Ad hoc distributed ın aktif hale getirilmesiyle farklı veri kaynaklarından veriyi çekebilmek için t-sql kodları olan OPENROWSET,OPENQUERRY ve OPENDATASOURCE u kullanabilmemizi sağlar.

Daha sonra da Kadıkoy instance ımızda doldurduğumuz tablodan verimizi Besiktas instance mızda çekmek üzere scriptimizi çalıştırıyoruz ;

Veriyi çekebildiğimizi gördüğümüze göre SProc1 in çalıştığı instance üzerinde bu veriyi kullanmak için başka bir temp e atıp sorunu çözmeye devam edebiliriz 🙂

Bir sonraki yazımızda görüşmek dileğiyle 🙂