CASE WHEN

Erkan Sezer

Sql Server da kullanışlı bir fonksiyon olan Case fonksiyonu ile ilgili küçük bir örnek yapacağım. tblmusteri adinda bir table`ımız olduğunu ve bunun da id  (auotincrement), musterino , isim , adress ve il kolonlarının bulunduğunu düşünelim, il kolonu integer türünde ve biz bu kolonun varchar yani string olarak değerini görmek istiyoruz. İşte burda Case bize çok uygun bir yapı sağlar.

 select * from tblmusteri  WITH (NOLOCK)    dediğimizde bizim karşımıza gelecek data aşağıdaki gibidir.

1 1001 Erkan Sezer Kadıkoy 34

7 1002 Mehmet Dal Ermenek 70

3 1003 Aynur Guney Ermenek 70

4 1004 Muhammet Ali Hancer Cekmekoy 34

5 1005 Yavuz Selim Keresteci Goztepe 34

Peki ben bu il kolonunu nasil string yaparım?  Select ifademi aşağıdaki gibi değiştirirsem bana ilisim isminde bir kolon daha gelecektir ve burda da il isimlerinin yazdığını göreceğiz. Peki select ifademde ne yaptığımı kısaca anlatacak olursak; gelen il değerine bakıldı ve bu değer 34 ise İstanbul , 70 ise Karaman olarak ilisim kolonuna getirildi. Bu yapı çok kullanışlıdır ve bize çoğu zaman çok kısa çözüm yolları sunar. Select ifademiz ve gelen yeni data ağağıdaki gibidir.

SELECT *

CASE il 

WHEN `34` THEN `İstanbul` 

WHEN `70` THEN `Karaman` END 

AS ilisim

FROM tblmusteri WITH (NOLOCK)   

1 1001   Erkan Sezer   Kadıkoy   34  İstanbul
7 1002   Mehmet Dal   Ermenek   70   Karaman
3 1003   Aynur Guney   Ermenek   70   Karaman
4 1004   Muhammet Ali Hancer   Cekmekoy   34   İstanbul
5 1005   Yavuz Selim Keresteci   Goztepe   34   İstanbul


07 Şubat 2010 Pazar


IF EXISTS Kontrolu

Erkan Sezer

Sql Server de IF EXISTS ifadesinin nasil kullanilabilecegini anlatacagim. Ornegin table1 isminde bir table var ve bundan da id kolonunuz olsun, bu kolonda 1 ve 2 degerlerinin oldugunu dusunuyoruz. Simdi bu table1 tableinin id kolonunun degerine gore ekrana kayit var veya kayit yok yazdiracagiz.

Tabiki siz bu yazdirma islemi yerine sql de istediginiz islemleri yapacaksiniz :) Asagidaki ifadede yukarda da belirttigim gibi id degerinin 1 oldugu satir var ve bu yuzden ekrana "Kayit Var" yazacaktir.

IF EXISTS ile bu ifadeye bakiyorum ve 1 degeri oldugu icin ilk BEGIN END bloguna girerek istedigim islemleri (update , delete , insert veya transaction) veya da ELSE blogunda gerekli islemleri yaptiririm.

IF EXISTS(select * from dbo.table1 where id = 1 ) 
BEGIN 
    SELECT `Kayit Var`
END
ELSE
BEGIN
    SELECT `Kayit Yok`
END

29 Kasım 2009 Pazar


Sql de Database Ismini Degistirmek

Erkan Sezer

Cok da kullanilmayan bir durumdur ama yine de burda yazmak istedim. Sql Server da database imiz var ve bunun ismini degistirmek istedik bunu asagidaki sekilde bir sp call ederek rahat bir sekilde yapabiliriz.

EXEC sp_renamedb `erkan`, `sezer`

Burda dikkat etmemiz gereken ilk parametre database ismi ikincisi ise isimlendirmek istedigimiz database in yeni ismidir.

26 Eylül 2009 Pazartesi


T-SQL de Bolme Islemi

Erkan Sezer

T-Sql de bolme islemi yaparken dikkat etmemiz gereken kucuk bir noktadan bahsedecegim.
Bolme isleminde bolunenin deger turu float ceya decimal olmalidir . Asagidaki ornektede goreceginiz gibi bu deger turu float veya decimal degilse sonuclar yanlis cikacak ve ozellikle bankacilik gibi muhasebe islemlerinin cok oldugu sektorlerde bize buyuk zararlar verecektir.

Asagidaki ornekte gordugunuz gibi bize ilk donen select 0 olurken convert ile float turune cast edilen bolunen sonucunda bize 0.75 degeri donecektir.

SELECT 3/4;
SELECT CONVERT(FLOAT, 3) / 4

Ayni sekilde convert ile ayni islemi yapan CAST fonksiyonu ile de bu islemi gerceklestirebiliriz. Buda da FLOAT a degil de DECIMAL a cat ediyoruz bolunen degeri.

SELECT 3/4;
SELECT CAST(3 AS DECIMAL) / 4

Ikinci select sonucu decimal e cast ettigimiz icin boluneni bize 0.750000 degeri yani yukardaki ile ayni deger donecektir.

12 Eylül 2009 Cumartesi


SQL Server` da Temp Table

Erkan Sezer

Sql Server kullanirken bazi bilgiler uzerinde oynama yapmak isteriz. Ornegin select attigimiz table dan gelen kayitlar uzerinde null degerler5 olabilir , yeni bir kolon eklemek isteyebiliriz veya bazi kolonlardaki degerleri update etmek isimize gelecektir.

Buna benzer durumlardan dolayi sql de bulunan table dan cektigimiz kayitlari temp table a yazdirabiliriz. Ben sadece 3 kaydi olan basit bir table i temp table a yazdirmayi ve burdan degerleri select etmeyi, son olarak da temp table i tumden silmeyi asagidaki gibi gosterecegim.

Table ismimiz kullanici: Select attigimizda asagiki gibi degerleri gorecegiz.

KullaniciAdi AdSoayd Adres

erkansezer Erkan Sezer Sahrayicedit

yavuzselim Yavuz Selim Keresteci Goztepe

muhammetali Muhammet Ali Hancer Cekmekoy

Daha sonra bunlari asagidaki gibi #tmp isimli bir table a yazdiririz , select attgimizda yine ayni degerleri gorecegiz.

SELECT * INTO #tmp FROM kullanici 

Burda #tmp isimle table olusturuldu ve kullanici table indaki kayitlar buraya insert edildi.  

Bu temp table a su sekilde select atabiliriz : SELECT * FROM #tmp

Bu select ile yukardaki select ayni olacaktir. Son olarakda islemlerimiz bittiginde bu temp table i asagidaki gibi drop etmemiz gerekir.

DROP TABLE #tmp


16 Ağustos 2009 Pazar


Sql`de Calisan Exe`nin Ismi

Erkan Sezer

Database olarak Sql Server`i kullanan ve birden fazla sayida exemiz olduğunu varsayalım. Hangi exe`de çalıştığımızı bulmak için genellikle SQL`e strored procedure ile parametre geçiyoruz. Bu iş hem zahmetli hemde maliyetli olmaktadır, bunu çok daha efektik ve kolay olarak yapabiliriz.

Yapacagimiz tek sey : SQL de hangi exenin calistigini bulmak,bunun icin Application name`ini bulursak işlerimiz çok kolaylasacaktir. Bunu da asagidaki kod blogu ile rahat sekilde bulabilmekteyiz.

SELECT APP_NAME()

If  donguleri kullanarak bu bizim icin cok büyük kolayliklar saglayacaktir.

IF APP_NAME()=`Exe nin İsmi`

BEGIN

   Yapmak istediginiz islem

END


22 Nisan 2009 Çarşamba


Sql Server 2008 Intellisense

Erkan Sezer

Visual Studio idesi ile kod yazarken bize buyuk kolayliklar salayan Intellisense ozelligi Sql Server 2008 ile birlikte T Sql yazarken bize sunuldu. Bunda onceki versiyonlarda third party uygulamalarla kullandigimiz intellisense ozelligi bize buyuk kolayliklar saglayacak.

Select * from ifadesinde Ctrl + Space tusu ile table isimlerini artik otomatik olarak gorebilecek ve istedigimiz table ismine daha kolay ulasacagiz. Bircok karmasikligi cozecek olan bu durum table isimlerini de tam olarak bilmek gerektirmeyecek. Ayrica join ifadelerinde otomatik olarak ad siralamasi yapacagi icin , bizi bircok hatadan da kurtaracak.


13 Nisan 2009 Pazartesi


Sql`de Table`a Kolon Eklemek / Değiştirmek

Erkan Sezer

Sql Server`da tablelar oluştururken genellikle hep wizardları kullanırız Bu bizim için büyük kolaylıklar sağlar fakat büyük bir projede olduğumuzu düşünürsek her seferinde tek tek tablelari bulmakla uğraşabailiriz.

Daha da önemlisi dba bize tableları alter edecek yetki vermemişse ne yaparız? dba`e bu sql scriptini göndeririz. Ben burda oluşturulan tabloya kolon eklemeyi ve var olan bir kolonun değiştirilmesini anlatacağım.

ALTER TABLE Table_Ismi ADD Kolon_Ismi VARCHAR(40)

Burda Varchar tipinde ve 40 karakter uzunluğunda bir kolon ekliyoruz. Tabiki bunu istediğiniz kadar artırabilirsiniz.

Kolon üzerinde değişikliği ise şu şekilde yapabiliriz:

ALTER TABLE Table_Ismi ALTER Column Kolon_Ismi VARCHAR(38) 


01 Şubat 2009 Pazar


Sql Serverda Bazı Fonksiyonlar - 2

Erkan Sezer

Sql Server` da birkaç yeni fonksiyonu anlatacağım.

CHARINDEX : İlk parametre olarak aldığı stringi verilen karakterlerin içinde kaçıncı harf olduğunu gösterir. Örnek vermek gerekirse aşağıdaki Select sonucu bize dönen değer 18 olacaktır. Aradığımız karakter `?` dir ve bu da 18. karakterdir.

SELECT  CHARINDEX(`?` , `Bakalım Olacak mı? Tabiki Olacak `)

SUBSTRING: Birçok yerde kullandığımız gibi substring fonksiyonu Sql`de de karşımıza işimizi çok kolaylaştıracak şekilde çıkmaktadır.

Substring ile strind değerinin kaçıncı paramtersinden başlayacağımızı ve kaç karakter alacağımızı vermektedir. Substring işlerimizi bazen çok kolaylaştırmaktadır. Basit bir örnek verecek olursak:

SELECT SUBSTRING(`Erkan Sezer`, 7,5) , bize verilen string değeri `Erkan Sezer` dir ve bizden istenen de 7. karakterden başlayarak 5 karakter almamızdır. Bu select değeri bize `Sezer` stringinigeir döndürecektir.



19 Aralık 2008 Cuma


Sql Serverda Bazı Fonksiyonlar

Erkan Sezer

Sql`de çok kullanılan bazı fonsiyonları aşağıda bulabilirsiniz.

LEN :Bu bize karakter uzunluğunu vermektedir.

SELECT LEN(`Erkan Sezer`)  bu sorgulamanın sonucu bize 11 olarak dönecektir.

LEFT: Parametre almaktadır ve ilk paramterde gönderdiğimiz karakterdir , ikincisi ise bu karakterden sol başlangıcından alınacak olan karakter sayısıdır.

SELECT LEFT(`Erkan Sezer` , 3) Bize `Erk`  değeri döndürür.

RIGHT: LEFT fonksiyonunun yaptığının aynısını sağdan başlayarak yapmaktadır.

SELECT RIGHT(`Erkan Sezer`, 3) Bu ise bizer `zer` değeri döndürecektir.

LTRIM : Verilen karakterlerin sol baştan boşluklarını silmememizi sağlar.

Buna örnek verecek olursak:

SELECT LEN(`   Erkan Sezer`)  bize 14 değeri verir fakat , SELECT LEN(LTRIM(`   Erkan Sezer`)) bize 11 değeri verecektir çünkü soldan boş değerler silinmiştir.

19 Aralık 2008 Cuma


Sql Serverda Trigger Disable Etmek - 2

Erkan Sezer

Bir önceki ipucunun devamı olan Sql Serverda Trigger Disable Etmek - 2 başlıklı ipucumuza devam edeceğiz. Daha önce Trigger`a yazılan RETURN komutu ile trigger etkisiz durumu getirilmişti. Şimdi ise daha kullanışlı bir yapı olan Disable ve Enable kodundan kısaca bahsedeceğim.

Aslında çok basit şekilde Trigger`ı disable ve daha sonra işlemi gerçekleştirip tekrar aktif duruma getirmek için Enable yapabiliriz. Aşağıda örnek SQL scritplerini bulacaksınız.

DISABLE TRIGGER Trigger_Adi ON Table_Adi

Yapılması istenen delete`ler

ENABLE TRIGGER Trigger_Adi ON Table_Adi

Bu şekilde de istenen sonuca rahat bir şekilde ulaşırsınız.



01 Aralık 2008 Pazartesi


Sql Serverda Trigger Disable Etmek

Erkan Sezer

Diyelimki elimizde delete edeceğimiz bir kayıt var ve ben bu kaydı trigger sebebi ile silemiyorum. Bu kaydı silebilmem için trigger`i delete etmem gerekiyor. Tabiki bu biraz daha fazla uğraş içerir. Bunun için iki yöntem daha var. Öncelikle ilkini paylaşacağım

İlk yöntem trigger`dan return değeri ile triggerin içerdiği kodları çalıştırmamak. Trigger`imiz şu şekilde olsun.

CREATE TRIGGER Trigger_Adi ON Table_Adi

FOR DELETE  

AS 

INSERT Table_Adi(Kolon_Adlari) 

SELECT Kolon_Degerleri

FROM  DELETED 

Bu trigger`a eklenmesi gereken tek satır kod ile delete işlemini gerçekleştiririz. Return değerinin eklenemsi ile bu trigger kaytı silmemizi engellemeyecektir.

 

CREATE TRIGGER Trigger_Adi ON Table_Adi

FOR DELETE  

AS 

RETURN

INSERT Table_Adi(Kolon_Adlari) 

SELECT Kolon_Degerleri

FROM  DELETED 


01 Aralık 2008 Pazartesi


Sql Serverda Belirli Karakter Uzunluğu

Erkan Sezer

Az karşılaşılan bir durum olmasına rağmen Sql de belli bir karakter uzunluğunda bilgi girmek istediğimizi düşünelim. Örnek olarak karakter uzunluğumuz 20 karakter olsun fakat, bizim girdiğimiz değer 20 karakterden daha kısaysa ne yapacağız? 

Aslında çözümü çok basit bir sql cümleciği. Şimdi bunu anlatacağım. 20 karakter uzunluğunda karakter setim var ve benim ise karakter uzunluğum 11 karakter olsun (Erkan Sezer), geri kalana da boşluk değeri atacağım. Select bu durumu ekranda gösterirsek anlaşılması çok daha kolay olacaktır. 

SELECT LEFT( CONVERT(VARCHAR, ISNULL(`Erkan Sezer`,``))+SPACE(20) ,20) 

Burda soldan 20 karakter alıyoruz, Erkan Sezer değeri 11 karakter olduğuna göre kalan 9 karakter yerine boşluk atamam gerekecek .Çok fazla gerekmese de istisnai bir durum fakat çok kullanışlı.

01 Aralık 2008 Pazartesi