Type your search keyword, and press enter

Sql İfadelerinin Toplu Çalıştırılması – 2

Selamlar,

Hadi kaldığımız yerden devam edelim 😉 Şimdi hazırlamış olduğumuz tüm sql scriptlerini oluşturacağımız .bat dosyası ile toplu çalıştırma kısmına geldik. Bir text editor içinde aşağıda hazırlamış olduğum kalıbı kullanabilirsiniz. İşlevini de açıklayalım ;

Resimde sqlcmd fonksiyonlarını görebilirsiniz.

sqlcmd -i : inputfile — Sql ifadelerini içeren dosyayı tanımlar. Bundan sonra sql ifadesi içeren dosyamızın konumunu yazıyoruz.

-W : remove trailing spaces–Bu komutu kolondan sonraki boşlukları kaldırmak için kullanıyorum. -w küçük harf ile yazılırsa çıktının ekran genişliği tanımlanabilir.

-o : outputfile — çıktının yazılacağı dosyayı tanımlar. Burada dikkat ederseniz dosyanın sonunda %date formatını kullandım.

%date:~4,2%  : günü ayarlar.
%date:~7,2%  : ayı ayarlar.
%date:~10,4%  : yılı ayarlar.

-f 65001  : Bunu da .txt çıktımızı UTF-8 formatında alabilmek için ekliyoruz. 

Sonuç olarak aşağıdaki gibi bir yazım kullanabilirsiniz. Her script dosyası için bu komutu text editor içine yazıp dosyayı sqlresult.bat olarak kaydedip sonrasında görev zamanlayıcı ile de belirli periyotlarda çalışmasını sağlayabilirsiniz.

sqlcmd -i C:\Tedarikci\Script1.sql -W -o C:\Tedarikci\Script1result_%date:~4,2%%date:~7,2%%date:~10,4%.txt -f 65001
sqlcmd -i C:\Tedarikci\Script2.sql -W -o C:\Tedarikci\Script2result_%date:~4,2%%date:~7,2%%date:~10,4%.txt -f 65001

Görüşmek üzere,

 

SQL İfadelerinin Toplu Çalıştırılması – 1

Evet oldukça uzun bir aradan sonra sevgili bloğuma geri döndüm. Yazmak isteyip de bir türlü vakit bulamamaktan şikayet ederken aslında vaktimi verimli kullanmadığımı fark ettim ve bu gidişata bir dur demeye karar verdim 🙂

Bugün çok işinize yarayacak temel sql ifadeleriyle ilgili örneklerden bahsedeceğim. Bu sql scriptlerinin, batch dosya ile nasıl toplu çalıştırılabileceğini de bir sonraki yazımda paylaşacağım. Örneklerimde aynı zamanda text dosya oluşturmak için gerekli kalıbı da bulabilirsiniz. Her dönen değeri birbirinden ayırmak için ‘;’ ifadesini kullandım. 

  • REPLACE İfadesi

Sorgudan dönen değerimizde değişiklik yapmak için kullanacağız. Burada dil “T” olarak dönüyorsa bunu “TR” ile değiştiriyoruz.
Ve bu scripti Script1.sql olarak kaydedelim.

SELECT  C.TEDARIKCI+ ‘;’ +C.AD+ ‘;’ +C.SOYAD +’;’ +C.SEHIR+ ‘;’ +B.ULKEKODU+ ‘;’+
REPLACE(C.LANGU,’T’,’TR’) + ‘;’ + ‘;’
FROM VERITABANI..TEDARIKCI C, VERITABANI..ULKE B
WHERE  C.ULKEKODU=B.ULKEKODU
ORDER BY C.TEDARIKCI

  • CONVERT İfadesi

Bunu da text dosyada tarih ya da sayı bilgisi yazabilmek için kullanıyorum , ihtiyacınıza göre şekillendirebilirsiniz.  Ben tarih formatında yyyymmdd kullandığım için 112 modelini kullandım. Replace ve Convert ifadelerinin iç içe kullanımına da ihtiyaç duyabilirsiniz. Sorgudan dönen belge tarihi değeri geçersiz ise sonucu belge oluşturma tarihini getirecek şekilde değiştirdim.
Bu scripti Script2.sql olarak kaydedelim.

SELECT DISTINCT C.TEDARIKCI+ ‘;’ +
CONVERT(VARCHAR(10), C.KAYITTARIHI, 112) +’;’+
CONVERT(varchar(29), B.MIKTAR) +’;’ +
REPLACE (CONVERT(VARCHAR(10), B.KAYITTARIHI,112),’19000101′,
CONVERT(VARCHAR(10), B.OLUSTURMATARIH, 112)) +’;’ +
CONVERT(varchar(10), MONTH(B.BELGETARIH))+’;’
FROM VERITABANI..TEDARIKCI C , VERITABANI..SIPARIS B
WHERE C.TEDARIKCI=B.TEDARIKCI

  • SUBSTRING İfadesi

İfadelerin kullanımına odaklanmak için aynı örnek üzerinden gidiyorum  , farklı örneğe ihtiyacı olan varsa yazsın lütfen.

Substring de benim rtrim ve ltrim ile birlikte çok kullandığım ifadeler arasında bulunuyor. Sorgudan dönen kaydın sağında ve solundaki boşlukları atıp sonucu belirttiğiniz karakterden başlayıp yine belirttiğiniz uzunlukta alabilmenize yarar. Örneğimde açıklama alanının sağında ya da solunda olan boşlukları atıp , ilk karakterden başlayıp 60 karaktere kadar olan kısmı alıyorum.
Bu scripti Script3.sql olarak kaydedelim.

SELECT  C.TEDARIKCI+ ‘;’ +
SUBSTRING(RTRIM(LTRIM(B.ACIKLAMA)),1,60)+ ‘;’
FROM VERITABANI..TEDARIKCI C , VERITABANI..SIPARIS B
WHERE C.TEDARIKCI=B.TEDARIKCI

  • NULLIF ve COALESCE İfadeleri

Sorguda hem boş hem de null değer içeren bir sonuç varsa ve  kesinlikle bir değer döndürmesini istiyorsam Nullif ve  Coalesce ifadelerini kullanıyorum.
Buradaki sorguda replace kullanmamın nedeni  işleri biraz daha karmaşıklaştırmak 🙂

Replace ile parabirimi “TL” ise “TRY” ye çevirdik. Ardından  Nullif ile de dönen değeri boşlukla karşılaştırdık , eğer değer “TL” ise ekrana “TRY” yazacak ama değer boş ise o zaman “null” döndürecek ve eğer dönen değer “null” ise o zaman yine “null” döndürecek, anlamlı değil mi?
Bu şekilde bir sonraki adımda Coalesce ifadesini de bu null değeri TRY olarak değiştirmek için kullanıyoruz.
Bu scripti Script4.sql olarak kaydedelim.

SELECT  C.TEDARIKCI+ ‘;’ +
COALESCE(NULLIF(  REPLACE(B.PARABR,’TL’,’TRY’)  ,”), ‘TRY’) + ‘;’
FROM VERITABANI..TEDARIKCI C , VERITABANI..SIPARIS B
WHERE C.TEDARIKCI=B.TEDARIKCI

    • CASE WHEN İfadesi

Case when aslında if/then mantığında çalışır. Yani örneğimden ilerlersek sırano değeri null ise 10 yazar değilse aldığı değeri yazar gibi.
Bu scripti Script5.sql olarak kaydedelim.

SELECT  C.TEDARIKCI+ ‘;’ +
CASE WHEN MAX(B.SIRANO) IS NULL THEN ’10’ ELSE
(CONVERT(VARCHAR(10),MAX(B.SIRANO))) END)
FROM VERITABANI..TEDARIKCI C , VERITABANI..SIPARIS B
WHERE C.TEDARIKCI=B.TEDARIKCI GROUP BY C.TEDARIKCI

Bir sonraki yazımda görüşmek üzere..