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

Query Analyzer Add comments

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.

4 Responses to “SQL Server’da DTS için Global Variable Tanımlamak”

  1. RAMAZAN ERBUÄž Says:

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

  2. Ahmet Kaymaz Says:

    Ramazan bey, aynı iÅŸlemleri SQL Server 2005 içindeki DTS package’ler için de yapabilirsiniz. EÄŸer Microsoft SSIS (DTS) package için bir çalışma yapacaksanız aÅŸağıdaki linki tavsiye edebilirim

    http://www.codeproject.com/useritems/global-variable-in-SSIS.asp

  3. Halil Çetiner Says:

    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.

  4. Ahmet Kaymaz Says:

    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.

Leave a Reply


− 3 = 2

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS GiriÅŸ