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
|
|
|
|
|