SQL Server’da DTS için Global Variable Tanımlamak

SQL Server üzerinde farklı kaynaklardan data transferi, toplu aktarımlar ve yerel işlemler için çoğu zaman Data Transformation Services (DTS) denilen Veri Transfer Servisini kullanırız. Hatta bu servis aracılığıyla hazırladığımız paketleri SQL Server Agent yönetiminde Job işlemlerine alarak belli peryotlarda çalışmasını sağlarız. Özellikle kurumsal uygulamalarda dağıtık kaynaklardan belli anlarda verileri çekmek ve üzerinde işlem yaparak yerel veritabanlarına kaydetmek için DTS’ler vazgeçilmez bir alışkanlık haline gelir. MSDB veritabanında tutulan bu paketler, sunduğu zengin connection provider ve tasklarla ciddi bir kolaylık sağlar. Bu bölümde DTS paketleri içindeki genel değişken tanımlamanın nasıl yapılacağını ve dışardan DTS’lerin nasıl parametrik haline getirileceğini göreceğiz.
DTS paketlerinde global değişkenler(global variable), işlemleri dinamikleştirmeyi sağlar. Connection String’ten tutun da çalışacak Sql Query’lerine veya IO işlemlerine kadar birçok iş dinamik hale getirilebilir. Global değişkenler, DTS’leri dinamik kıldığı gibi diğer packagelerden değişken gönderilmesini, bir tasktan diğer taska veri taşınmasını kısaca DTS’i modüler hale getirir.
Global değişkenleri, DTS paketlerinde ActiveX script içerisinde kullanabileceğimiz gibi doğrudan tasklar içerisinde çalışacak Sql Query’leri tasarlarken de kullanabiliriz. Öncelikle Sql Server Enterprise Manager’dan Data Transformation Services bölümünden Local Packages’i sağ tıklayıp New Package üzerinden yeni bir DTS paketi oluşturalım. DTS içerisinde sağ tıklayıp Package Properties bölümüne girelim. Buradaki Global Variables sekmesinde string türünde Magaza ve Date türünde Tarih isminde iki genel değişken tanımlayacağız. Ayrıca default değer vermemiz de doğru olur.

Hazırladığımız genel değişkenlerin değerini okumak için Task bölümünden ActiveX Script Task nesnesini çalışma alanına taşıyalım. Genel değişkenleri DTSGlobalVariables nesnesiyle çağırabiliriz.

Global değişkenlerin default olarak case sensitive olduğunu unutmamalıyız.
Bu işlemden sonra çalışma alanının üst kısmında Execute düğmesine basıp çalıştırdığımızda Magaza değişkeninin değerini okumuş oluruz.

Bu şekilde dışardan bazı değerler alıp IO işlemlerini yapabiliriz. Nitekim ActiveX scriptler daha çok IO işlemler yapmak için kullanılır. Biz, burada bu değişkenleri Sql Query içerisinde kullanacağız. Bu amaçla DTS alanına bir Microsoft OLE DB Provider for SQL Server nesnesi taşıyıp lokaldeki sql server için bir database bağlantısı oluşturalım. Ardından bu bağlantıyı kullanarak çalışacak bir query oluşturmak için Task bölümünde Execute SQL Task ikonu taşıyalım. Bu task içerisinde bende bulunan CUSTOMER tablosunu sorgulayacağım. Bu querynin dışardan argüman olarak aldığı mağazanın yine dışardan aldığı tarihteki müşterilerini başka bir tabloya aktarmasını istiyorum. Query’i yazarken parametrik değerlerin yerine “?” simgesini ekliyoruz.

Ardından pencerenin altındaki parameters butonunu tıklayarak parametreleri sırasıyla eşleştirelim.

Daha sonra DTS’i kayıtedelim. DTS paketini AKAYMAZ\AKAYMAZ isminde Sql Server’da MusteriAktar ismiyle kaydettim.

DTS paketleri doğrudan SQL Server’da database yapılarının bir parçası olmadığı için T-SQL kodlarıyla çalıştırmak yerine DTSRUN ismindeki batch dosyasıyla çalıştırırız. DTSRUN komutu, hangi sunucuda hangi DTS’i hangi argümanlarla çalıştırılacağına dair bir çok bilgiyi parametre olarak alır.

Bu DTS’i aşağıdaki syntax ile çağırabiliriz.DTSRun /S "AKAYMAZ\AKAYMAZ" /N "MusteriAktar" /A "Magaza":"8"="M02" /A "Tarih":"7"="20.02.2006" /W "0" /E
/S = Server adı, WINS ismi veya IP Adresi

/N = Package adı

/A = global variable, her değişken için tekrar eder

“:8¨ string değerin geçileceğini

“:7¨ Date türünde değerin geçileceğini

/E = trusted login bunu yerine /U ve /P kullanılarak username ve password girilebilirdi.

DTSRUN ifadesinin bu şekilde oluşturulması hepimize zor gelir. Bunun için günlük hayatımda kolaylıklar sağlayan DTSRUNUI toolunu tavsiye ederim. DTSRUN syntaxını görsel ortamda oluşturan bu araçta hem parametreleri hem de schedule işlemleri rahatlıkla yapılabiliri. Command Prompt üzerinden DTSRUNUI’yi çalıştıralım. Burada Sql Server sunucunu seçtikten sonra Package name bölümünü tıklayıp sistemdeki DTS’lerden aradığımız paketi seçelim.

Ardından Advanced bölümünden ek özelliklere ulaşalım. Buradaki Variables bölümünden şekildeki gibi argümanları set edelim. Ve OK butoununu tıklamadan alt taraftaki Generate butonunu kullanarak DTSRUN’a ait syntax elde edelim.

SQL Server’da DTS için Global Variable Tanımlamak” üzerine bir düşünce

  1. RAMAZAN ERBUĞ

    peki ustad bunu mssql server 2005 nasıl yapabiliriz. acıklarsan cok ii olur.emegine salık kolay gelsin

    Cevapla
  2. Halil Çetiner

    Ahmet Bey,SQL Server 2000’de kullandığımız harici bir dll vardı. SQL Server 2005’in 64 bitini kurduk. Job içerisinde ActiveX Script olarak kullandığımız bu dll “ActiveX component can’t create object” hatası veriyor.

    Cevapla
  3. Ahmet Kaymaz Yazar

    Eğer kullandığınız componentlerin 64 bit uyarlaması yok ise 64 bit (x64) ortamında 32 bit(x86) tabanlı işlemleri yaptırabilirsiniz. Örneğin script kodlarınızı bir vbs dosyasına kaydedip %SystemRoot%\SysWOW64\cscript.exe komutuyla çalıştırabilirsiniz. Scriptleri çalıştıran cscript.exe programının 32bit versiyonu C:\WINDOWS\SysWOW64\ klasöründe, 64 bit versiyonu C:\WINDOWS\System32 klasöründe bulunur. x64 tabanlı işletim sisteminde default olarak System32 klasörü kullanılır.

    Cevapla
  4. Hüseyin Çelikel

    Baya sene olmuş konu işleneli fakat takıldığım bir durum var. WHERE ifadesinden sonra kullanılan parametreleri WHERE ifadesinden once kullanabiliyor muyuz? SELECT @Yil AS Yil FROM tablo şeklinde.

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.