You are on page 1of 114

Yazlmclar in SQL Server 2008

ve
Veritaban Programlama

Yaar Gzdeli

YAZILIMCILAR N

SQL SERVER 2008


ve
VERTABANI PROGRAMLAMA
4. BASKI

Ankara, 2009

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Yaar Gzdeli

Bilgisayar Kitaplar Dizisi: 99


ISBN 978-975-02-1014-3
Drdnc Bask:
Haziran - 2009
Sekin Yaynclk San. ve Tic. A..
Bu kitabn her trl yayn hakk Sekin Yaynclk San. ve Tic. A..'ye aittir. Yaynevinin yazl izni olmadan, tantm amal
toplam bir sayfay gemeyecek alntlar hari olmak zere, hibir ekilde kitabn tm veya bir ksm herhangi bir mecrada
yaynlanamaz ve oaltlamaz.
Sayfa Tasarm:
Sekin Yaynclk
Kapak Tasarm:
smail am
Yayn ve Datm:
Merkez: Sekin Yaynclk, Salk Sokak No: 19/B-21 06410 Shhiye, ANKARA
Tel: (0312) 435 30 30 (Pbx), Faks: (0312) 435 24 72
ube: Ankara Adliye Saray K Blok Zemin Kat Shhiye, ANKARA Tel: (0-312) 309 52 48
ube: Abide-i Hrriyet Caddesi 259/4 (ili Ceza Adliyesi Alt) ili - STANBUL Tel: (0-212) 234 34 77
Web Adresi: www.seckin.com.tr, Eposta: yayin@seckin.com.tr
Bask:
Szkesen Matbaaclk, Tel: (0312) 395 21 10

Teekkr
Bu kitabn ortaya kmasnda en byk fedakrlk phesiz ki aylarca, kendilerine ait
olan zamanda bilgisayarla ba baa kalmama tahamml edebilen eim Lale'ye, kzm Neva'ya ve olum Yusuf Hakan'a aittir. Kendilerine teekkr ederim.
zellikle yeni nesil Microsoft teknolojileri konusunda beni yaama balayan zcan Ko'a; SQL Server'in geliim srecinde, kitap fikrimi srekli taze tutan ve beni yreklendiren, Sefer Algan ve Tolga Yaram olmak zere tm arkadalarma teekkrlerimi sunarm. 9.Blmde yer alan Uzaysal Veri Tipleri'ne olan katklarndan dolay Mehmet Karaman'a, 10.Blmde yer alan ADO.NET 2.0 yenilikleri bahsine katklarndan dolay
Burak Selim enyurt'a teekkr ederim. Kitap ieriini sizlerden nce okuyarak, gerek
fikirleri gerekse deerlendirmeleri ile sizlere daha az hatal bir kitap sunmam konusunda
bana yardmc olan deerli yazlm gelitirici arkadalarm Volkan Verim, Ouz Kaan
Yamur ve Salih Bozkurt'a teker teker teekkrlerimi sunarm.
Kitap ieriinin ve mfredatnn genel kabul grm bir mfredat haline gelmesinde,
INETA- MEA'nn Verivizyon'a verdii destek phesiz yabana atlamaz. Bu kapsamda
INETA'ya teekkrlerimi sunarm. Yine kitap mfredatna alnm konularn anlatmlarnn olgunlamas Verivizyon aktiviteleri ile salanmtr. Verivizyon tarafndan dzenlenen seminer, eitim ve benzeri etkinliklere emei geen ve katlan herkese teekkrlerimi sunarm. Kitabn dzenlenmesi ve okunabilir hale gelmesinde emei geen Sekin
Yaynclk alanlarna ve desteklerinden dolay btn mesai arkadalarma teekkr
ederim.
Kitabn bundan nceki basklar hakknda, tevecchlerini veya dzeltmelerini ileterek
daha iyiyi arama servenimde bana destek veren okurlarma teekkr ederim. Gnlk
hayatta karlatklar sorunlar ve zmlerini dolaysyla da tecrbelerini benim araclmla siz okurlara ulatran yazlmc dostlarma, son olarak bu kitab okumaya deer grp elinize aldnz iin ve belki bana grlerinizi ileterek daha iyiyi bulmama yardmc
olacanz iin size teekkrlerimi sunarm.

INETA Hakknda

Ksa ad INETA olan International .NET Association, Microsoft .NET temelli yazlm
gelitiriciler iin paylam alan salayan bir oluum. INETA'nn hedefi, dnyann birok
yerinde oluturulmu BT topluluklarnn kendi yelerini Microsoft. NET teknolojileri
konusunda eitebilmeleri ve bu teknolojilerin tantmn yapabilmeleri iin gerekli kaynak ve destekleri salamak. BT Profesyoneli, yazlm gelitirici veya mimar yahut ta proje
yneticilerinden oluan kullanc topluluklar INETA'nn destek verdii topluluk kapsamnda ele alnmakta.
Bir kullanc topluluunun INETA erevesinde yer alabilmesi iin, herhangi bir .NET
alan veya .Net'in tm alanlar ile ilgileniyor olmas veya birok baka yazlm gelitirme
teknolojilerinin yan sra .NET ile de ilgileniyor olmas gerekmekte.
Kr amac gtmeyen ve bamsz bir kurulu olan INETA, Microsoft ve dier sponsorlarnn desteinde, dnyann birok yerindeki ok sayda kullanc topluluklarnn yneticileri araclyla yrtlmektedir.
INETA'YA Katlmak
INETA yelii, btn kullanc topluluklar iin u anda, yer, ilgi oda ve iliki ayrm
yapmakszn cretsiz yaplmakta. .NET ile ilgili bir grup iin en etkin deer kazanm aktif INETA katlm ile mmkndr.
Bir yazlm gelitirici olarak, INETA erevesinde rol alabilmek iin size en yakn
INETA topluluunu www.ineta.org adresinden bulabileceiniz gibi, uygun bir topluluk
bulamamanz halinde siz de etrafnzda .NET teknolojilerini kullanan yazlm gelitiricileri bir araya getirerek INETA olanaklarndan faydalanp, INETA ierisinde aktif rol stlenebilirsiniz.
INETA, yelie kabul ettii bir topluluun muntazaman geliimini srdrebilmesi iin,
yelerine ynelik dzenli aktivitelere tevik etmektedir. Ayrca ye kullanc topluluklarnn seminer verebilmeleri iin ortam ve konumac salanmas, seminer annda merubat ve pizza sunulmas gibi konularda kullanc gruplarna destek olmakta, gerektiinde
kitap tr bilgilendirici materyaller ile de onlarn kresel eilimlerle btnlemi kalmas
hususunda destek salamaktadr.
INETA hakknda daha fazla bilgi iin, www.ineta.org adresine gz atabilirsiniz.

INETA'nn nsz
Gnmzn kurumsal bilgi teknolojileri altyaplarn oluturan bir ok veritaban ynetim sistemi ierisinde SQL Server en yaygn kullanlan olarak dikkat ekiyor. Her geen
gn daha fazla uygulamann, SQL Server uyumlu olarak pazarda kendisine salam bir yer
edindiini gryoruz.
Bu geliim sreci, uygulama gelitiricilerden bilgi teknolojileri yneticilerine kadar geni
bir kitlenin MS SQL Server hakknda teknik bilgilere daha kolay ve rneklerle desteklenmi olarak eriebilecei bir kaynak ihtiyacn douruyor. Yaar Gzdeli, SQL Server
2005 konusundaki kitab ile balad yolculuuna SQL Server 2008 ile devam ederek bu
ihtiyac karlyor.
SQL Server rnn gerekletiren yazlmclar bir alan veya teknoloji zerinde son derece detayl bir uzmanla sahiptirler. Yazdklar rnn zelliklerini bilmenin tesinde
yaadklar iin ou zaman bu detaylar kullanclar veya yazlmclara basit bir adan
aktarmakta zorlanrlar. te bu noktada Yaar Gzdeli derin ve uzun aratrmalar gerektiren bilgileri zmseyip, onlar sistematik bir ekilde okuyucusunun en ok yarar salayabilecei ekilde sunuyor.
SQL Server 2008 dendiinde benim aklma gelen ilk ey gvenlik; Dier veritaban ynetim sistemleri ile karlatrldnda uzun senelerdir sfr veya sfra yakn gvenlik a olmasn, kurumsal gvenlik politikalarndan taviz vermeden SQL Server iinde uygulanabilir olarak kmasna balyorum. Gvenlik tam anlamyla salanmasnn tesinde
kolay ekilde de ynetilebilir olmaldr. lk kuruluta gvenli olma, Veri kaynaklar eriim
kontrolleri, Veri ifreleme, aktiviteleri izleme ve kaydetme zellikleri ve bunlarn ynetimi SQL Server 2008i gvenlik konusunda rahata rakiplerinin stne yerletiriyor.
Yaar Gzdeli, SQL 2008 iin yazd bu kitapta veritabanna giriten balayarak sorgulamalar, Optimizasyon, T-SQL ve CLR, XML destei, ortak zamanl alma, Corafi
Tipler, harici sunucular ve Service Brokerlar ile almalardan da bahseden, rneklerle
zenginletirilmi, takibi kolay bir kaynak hazrlam. Kitap, profesyonel almalarmzda
SQL Server 2008' den nasl faydalanabileceimizi akc ve kolay anlalabilir bir slup ile
anlatyor.
Bir nceki SQL Server 2005 kitab 3 bask yapan ve 3000 adet satan, alannda byk
kabul gren kitab kadar baarl olacana emin olduumuz SQL Server 2008 kitabn
bize kazandran Yaar Gzdeli'ye, ktphanemizde en nlerinde yer alacak bu gncel
kayna hazrlad iin teekkrlerimizi sunuyoruz.
Gkin Bakr
Ortaklar ve stemci Grup Yneticisi, Microsoft MEA

nsz
nsanolu var olduundan bugne hep veriye gereksinim duydu. Ama belki bu gereksinimi hi bugnk kadar iddetli deildi. Hi phe yok ki bu gereksinim, yarn bugnknden daha iddetli olacak. Bu gereksinime paralel, verilerin birinci dereceden muhatab olan Veritaban Ynetim Sistemleri de srekli olarak gelimekte. SQL'in, standart
olarak ortaya atldndan bu yana yaklak 20 yldr poplerliini kaybetmemi bir dil
olmas onun ne denli gl ve gereksinim duyulan bir ey olduunu ortaya koyar. Belki
bunun en byk sebeplerinden biri, "veri" kaydnn ve sorgulamasnn hayatn temel bir
paras olmasndandr.
Veri ileme, her geen gn yeni gereksinimlerle karmza kmakta. SQL standard da
bu gelimelere paralel olarak 1999, 2003, 2006 yaynlaryla desteklendi. SQL Server
2008, bir VTYS olarak bu standartlardan payna deni fazlasyla alm bir veri ynetim
arac. 2000'den 2005'e gemeye nazaran, 2005- 2008 geiinin daha kolay bir gei olacandan emin olabilirsiniz.
Bu yeni srmde, SQL Server programlamann olmazsa olmaz olan Transact SQL ile ilgili birka iyiletirme yer almakta. Bir veritaban programcs iseniz, bu yenilikleri hzl bir
ekilde renmeniz sizin anzdan hi de zor olmayacaktr. Hatta kullanmaktan keyif
alacanz syleyebilirim. ayet 2008 srmne, SQL Server 2000'den geiyorsanz, TSQL 'in sizi zorlad hallerde CLR destei sizin iin bir kurtulu olacaktr, mutlaka deneyin
ayet bir Corafi Bilgi Sistemi projesi gelitiriyorsanz, SQL Server 2008 ile birlikte gelen
Uzaysal(Spatial) tipler ilerinizi olduka kolaylatracaktr. Yine Site haritas gibi verilerinizi tutmak iin hierarchyid tipini kullanmaktan keyif alabilirsiniz.
SQL Server 2005 XML Web Servis desteine yatrm yapan yazlmclar, sizlere zc bir
haberim var; 'Bir sonraki SQL Server srmnde aradnz bu zellii bulamayabilirisiniz!' Bu nedenle, ilgili niteyi kitaptan karttm.
Servis temelli alyorsanz, veya ok fazla veri ile boumanz gerektiinden yk datma ve lekleme yapma ihtiyacnz varsa, Service Brokers teknolojisi servislerinizin mesajlamasn veritabannn gc ile buluturacaktr. Bu konuda da bilgi edinmek sizin iin
elzem olabilir.
Btn bu yeni zellikleri bnyesinde barndran bir tek rn olarak karmza kan SQL
Server 2008, btn verilerinizi tek merkezden idare edebileceiniz gerek manada bir
'Veri' taban Ynetim Sistemi
Kitap yayna hazrlanrken etrafta halen SQL Server 2000 kullanan yazlmclarn da olduunu grdk. Bu nedenle her ne kadar SQL Server 2008 srm iin hazrlanm bir
kitap olsa da 2000 ve 2005 srmlerinden gemek isteyenleri de cesaretlendirmek iin
yer yer apraz srm kyaslamalarna yer verdim.
Veritaban ile tanmak iin bu kitab ald iseniz, ilk aamada kitap CD'lerinde yer alan
Veritaban Programlama 1-2 kitapklarn okuyarak balamanzda yarar var. nk
kitap bir seferde bitiremeyeceiniz kadar byk olduundan byk resmi karabilirsiniz!.

nsz

Kitap kapsam, balangtan orta seviyeye olduu iin bu kitap, "Yazlmclar iin SQL
Server 2005 ve Veritaban Programlama" adl bir nceki kitabn SQL Server 2008 yenilikleri erevesinde yeniden dzenlenmi halidir. Kitab bitirdiinizde, orta byklkte
bir veritaban ynetim sistemi iin yazlm ve ynetim ilemlerinin hemen hepsinin stesinden gelecek birikime sahip olacanz syleyebilirim. Ancak ekstrem projeler iin kitabn kapsam lekleme asndan yetersiz gelebilir.
Son olarak, konulara gemeden nce, ayet SQL Server 2008'i bu kitapla renmek
amacnda iseniz, unu bir prensip haline getirmi olmanzda byk yarar var; Bir dili veya
programlanabilir ortam tanmak iin bir satr kod altrp sonucunu grmek, bin satr
kodu okuyup gemekten iyidir. Unutmayn ki bir yazlmc iin tecrbe, ka saat kod
yazdndan te, kod yazarken ne kadar problemle karlat ile ilgilidir. Kod altrmadan, bakalarnn yazd hazr kodlar okuyarak(almayan bir kod bile olabilir, sadece
okuyarak bunu nerden bilebilirsiniz ki!) asla problemlerle karlaamazsnz.
Baar sizinle olsun
Yaar Gzdeli
ygozudeli@verivizyon.com
Mays 2009-ANKARA

Genel indekiler
1. Blm: VERTABANI KAVRAMINA GR ..................................................................... 39
1. NTE: likisel Veritabannn Temelleri .............................................................................. 39
2. NTE : SQL Server 2008'in Temelleri ................................................................................ 53
3. NTE: T-SQL'e Genel Bak ............................................................................................... 69
2. Blm: VERTABANI TASARIMI ................................................................................... 89
4. NTE: Veritaban Tasarmna Genel Bak ......................................................................... 89
5. NTE: Veritaban Nesnesinin Temelleri ........................................................................... 107
6. NTE: Tablolar Tasarlamak ............................................................................................ 127
7. NTE: Veri Btnln Salamak ................................................................................. 153
3. Blm: VERLER SORGULAMAK ................................................................................ 175
8. NTE: Basit Sorgular ...................................................................................................... 175
9. NTE: Tablolar Birlikte Sorgulamak ve zetlemek .......................................................... 201
10. NTE: leri Veri Ynetim Teknikleri ................................................................................ 225
4. Blm: VER ERMN YLETRMEK ...................................................................... 251
11. NTE: Viewlerle almak ............................................................................................. 251
12. NTE: Indeks Teorisi ..................................................................................................... 271
13. NTE: Indeks Ynetimi .................................................................................................. 289
5. Blm: T-SQL LE PROGRAMATK ELER KODLAMAK ............................................ 317
14. NTE: T-SQL ile Programlar Gelitirmek ........................................................................ 317
15. NTE: Stored Procedure'ler ........................................................................................... 345
16. NTE: leri T-SQL Programlama..................................................................................... 369
17. NTE: Kullanc Tanml Fonksiyonlar ............................................................................ 387
6. Blm: XML LE ALIMAK ........................................................................................ 399
18. NTE: Tip Olarak XML ................................................................................................... 399
19. NTE: XML-likisel Dnmler ................................................................................... 427
7. Blm: ORTAK ZAMANLILIK VE TRANSACTION ........................................................ 441
20. NTE: Transaction'larla almak ve Ortak Zamanllk ................................................... 441
21. NTE: Kilitlenmeleri Ynetmek ...................................................................................... 461
22. NTE: Triggerlar ............................................................................................................ 469
8. Blm: SQL SERVER NDE CLR ................................................................................ 493
23. NTE: CLR Genel........................................................................................................... 493
24. NTE: Basit Rutinler...................................................................................................... 511
25. NTE: leri Rutinler ........................................................................................................ 533

12

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

9. Blm: VERTABANI YETENEKLERN GELTRMEK ................................................. 547


26. NTE: Bal Sunucularla almak ................................................................................ 547
27. NTE: likisel Olmayan SQL Server Yetenekleri ........................................................... 555
28. NTE: Service Brokers .................................................................................................. 571
10. Blm: STEMC TARAFTA SQL SERVER ERM PROGRAMLAMA ....................... 591
29. NTE: ADO.NET Temelleri ............................................................................................. 591
30. NTE: ADO.NET'de Kopuk Veri Ynetimi ....................................................................... 617
31. NTE: SQL Server Management Objects'i Kullanmak .................................................... 639
EK A: VERTABANI PROGRAMCILARINA PULARI....................................................... 649
EK B: C# VE OOP KILAVUZU ........................................................................................... 669
EK C: BLM SONU SORU CEVAPLARI.......................................................................... 695
EK D: DKKAN VERTABANI EMASI ............................................................................ 705
EK E: CD KULLANIM KILAVUZU ...................................................................................... 707

indekiler
Teekkr .............................................................................................................................. 5
INETA Hakknda .................................................................................................................. 6
INETA'YA Katlmak ................................................................................................................... 6
INETA'nn nsz ................................................................................................................ 7
nsz ................................................................................................................................... 8
Genel indekiler................................................................................................................ 11
Giri.................................................................................................................................... 33
Veritaban Programlama Hakknda ......................................................................................... 33
Kitabn erdii rnekleri Test Edebilmek in ......................................................................... 33
Birikim Gereksinimleri ............................................................................................................ 34
Kimlere Hitabediyor ................................................................................................................ 34
Farkl Balang nerileri ........................................................................................................ 34
Kitap Neler eriyor ................................................................................................................ 36
Veritaban Kavramna Giri ...................................................................................................... 36
Veritaban Tasarm.................................................................................................................. 36
Veri Sorgulama ........................................................................................................................ 36
Veri Eriimini yiletirmek ........................................................................................................ 36
T-SQL ile Programatik eler Kodlamak .................................................................................. 36
XML ile almak ..................................................................................................................... 36
Ortak Zamanllk ve Transaction............................................................................................... 37
SQL Server 2008 iinde CLR .................................................................................................... 37
Veritaban Yeteneklerini Gelitirmek ........................................................................................ 37
stemci Taraftan Veritaban...................................................................................................... 37
EK A - Veritaban Programclarna pular ............................................................................... 37
EK B - C# ve OOP Klavuzu ...................................................................................................... 37
EK C - Dkkan Veritaban emas ............................................................................................ 37
EK D - Blm Sonu Soru Cevaplar........................................................................................... 38
EK E - CD Kullanm Klavuzu ..................................................................................................... 38

Gsterimler ve erik Dzeni Hakknda ................................................................................... 38


Kaynak Dosyalar Destek ve Geri Bildirim ............................................................................... 38

1. Blm

VERTABANI KAVRAMINA GR
1. NTE: likisel Veritabannn Temelleri ...........................................................39
TEMEL VERTABANI KAVRAMLARI .................................................................................. 39
likisel Veritaban Kavram .................................................................................................... 40
likisel Veritaban Yaklamna Basit Bir rnek ....................................................................... 41

14

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

likisel Cebirin Temel Operatrleri ......................................................................................... 43


Veritaban Programlama Nerelerde Kullanlr? .......................................................................... 45
Temel Veritaban Nesneleri ...................................................................................................... 45
Veritaban Uygulamalar .......................................................................................................... 50
N Katman Mimarisi...............................................................................................................50

Veritaban Atelyesi 1.1 ............................................................................................................ 51

2. NTE: SQL Server 2008'in Temelleri ...............................................................53


SQL SERVER BLEEN MMARS .......................................................................................... 53
Balca SQL Server 2008 Aralar .......................................................................................... 54
SQL Server Configuration Manager ......................................................................................... 54
Management Studio ................................................................................................................ 55
SqlCmd .................................................................................................................................... 56
SQL Server Surface Area Configuration ................................................................................... 58
SQL Profiler ............................................................................................................................. 59
Books Online ........................................................................................................................... 60

SQL Server Veritaban Mimarisi ............................................................................................. 60


Standart Veritabanlar .............................................................................................................. 60

Disk Ynetim Mimarisi ........................................................................................................... 62


SQL Server'de Disk lmleri .................................................................................................. 62
SQL Server'de Tablo ve Indeks'lerin Ynetimi .......................................................................... 64
Heap ..........................................................................................................................................65
Clustered Indeks ........................................................................................................................65
Nonclustered Indeks ..................................................................................................................65

SQL Server Kullanc Ynetim Mimarisi .................................................................................. 65


Roller ....................................................................................................................................... 65
Kullanclar ............................................................................................................................... 66
zinler ....................................................................................................................................... 67
emalar ................................................................................................................................... 67
SQL Server Properties\Security Sekmesi ...................................................................................67

Veritaban Atlyesi 1.2 ........................................................................................................... 68

3. NTE: T-SQL'e Genel Bak .............................................................................69


Veri Tanmlama Dili ................................................................................................................ 70
Nesne Oluturmak: CREATE .................................................................................................... 70
Nesne ve Deiken (Tanmlayc) simlendirme Kurallar ............................................................71
Tanmlayc simlendirme Notasyonlar ......................................................................................71
Tanmlayc simlendirmenin Tresi ............................................................................................71
Null Kavram ..............................................................................................................................72

Nesnelerde Deiiklik Yapmak: ALTER .................................................................................... 72


Nesne Silmek: DROP ............................................................................................................... 73

Veri leme Dili ....................................................................................................................... 73


Veri Eklemek: INSERT .............................................................................................................. 73

indekiler

15

Veri Semek ve Filitrelemek: SELECT ..................................................................................... 74


Ulama ........................................................................................................................................74
Seilen Kaytlar Sralamak .........................................................................................................75

WHERE Cmlecii ile Kaytlar Filitrelemek .............................................................................. 75


Verilerde Deiiklik Yapmak: UPDATE ..................................................................................... 76
Veri Silmek: DELETE ................................................................................................................ 77

Fonksiyonlar ........................................................................................................................... 77
Aggregate (Grupsal) Fonksiyonlar ........................................................................................... 77
Rowset Fonksiyonlar ............................................................................................................... 79
Skaler Fonksiyonlar ................................................................................................................. 79
Deterministik Kavram ................................................................................................................81

Veri Kontrol Dili ...................................................................................................................... 82


Yetki vermek: GRANT .............................................................................................................. 83
WITH GRANT OPTION Seenei ile Basamakl Yetkilendirmek ..................................................84

Eriimi Engellemek: DENY ....................................................................................................... 84


Eriim Tanmn Kaldrmak: REVOKE ......................................................................................... 85

Veritaban Atlyesi 1.3 ........................................................................................................... 86


Blm Sonu zeti .............................................................................................................. 87
Blm Sonu Tekrar Sorular .............................................................................................. 87

2. Blm

VERTABANI TASARIMI
4. NTE: Veritaban Tasarmna Genel Bak ......................................................89
Kavram Model ........................................................................................................................ 90
ORM ile Veritaban Modelleme ................................................................................................ 91
ER ile Modelleme..................................................................................................................... 92
ER ile Modelleme Aamalar ......................................................................................................93

UML ile Modelleme: ................................................................................................................ 94

Mantksal Model .................................................................................................................... 95


Veri Normalizasyonu .............................................................................................................. 96
Normalizasyon Kurallar ........................................................................................................... 96

Kaytlarn likilendirilmesi ...................................................................................................... 99


Bire Bir liki (1-1).................................................................................................................... 99
Bire ok liki (1-N) ............................................................................................................... 100
likisel Ortamda Hiyerarik Veriyi Modellemek .......................................................................100

oka ok liki (N-N) ............................................................................................................. 101

ER Diyagram ile Mantksal Model Oluturmak ..................................................................... 102


Fiziksel Model ...................................................................................................................... 105
Veritaban Atlyesi ............................................................................................................... 105

16

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

5. NTE: Veritaban Nesnesinin Temelleri ........................................................107


Dosya ve Dosya Gruplarn Anlamak .................................................................................... 107
Veritaban Oluturmak .......................................................................................................... 108
Management Studio ile Yeni bir Veritaban Oluturmak ......................................................... 108
Transact SQL ile Veritaban Oluturmak................................................................................. 109

oklu Dosya ve Dosya Gruplarn Kullanmak ........................................................................ 111


Dosya Grubu (File Group) Kavram ....................................................................................... 112
Default Dosya Grubu (Default File Group) .............................................................................. 113
Var Olan Bir Veritabannda Dosya ve Dosya Grubu Eklemek .................................................. 113

Veritabanna Eriecek Uygulama Kullancsn Ayarlamak..................................................... 115


Veritaban erisinde ema Kavram ..................................................................................... 115
emalar Ynetmek................................................................................................................ 116

Veritabann Ynetmek ......................................................................................................... 117


Veritaban Seeneklerini Ayarlamak ...................................................................................... 117
Veritaban Seviyeli Collation Ayar Yapmak ..............................................................................120

Veritaban Dosyalarnn Boyutunu Deitirmek ...................................................................... 121


Veritaban Dosyalarnn Boyut Artmn Ayarlamak...................................................................121
Otomatik Artrmaya Ayarlama .................................................................................................. 121
Mdahale Ederek Artrmak ....................................................................................................... 121

Transaction Log Dosyasn Gzlemlemek ............................................................................... 122


Veritabanlarn Kltmek (Shrinking) .................................................................................... 122
Veritabanlarn Silmek ............................................................................................................ 124

Veritaban Atlyesi 2.2 ......................................................................................................... 125

6. NTE: Tablolar Tasarlamak ..........................................................................127


Nesne simlendirirken........................................................................................................... 127
Stunlar Tasarlamak ve Veri Trleri ..................................................................................... 128
Metin Veri Tipleri ................................................................................................................... 129
ASCII Veri Tipleri ......................................................................................................................129
Unicode ...................................................................................................................................130

Metinsel Veri Tiplerinden Seim Yapmak .............................................................................. 130


Collation Ayarlar ................................................................................................................... 131
Tarih-Zaman Veri Tipleri ......................................................................................................... 132
Numerik Saylar ..................................................................................................................... 133
Yaklak Say Veri Tipleri ........................................................................................................ 133
Tamsay Veri Tipleri ............................................................................................................... 134
IDENTITY() Fonksiyonu ile Otomatik Artan Stunlar Tanmlamak .......................................... 134
Parasal Veri Tipleri ................................................................................................................. 136
Binary Veri Tipleri .................................................................................................................. 136
MAX fadesi .......................................................................................................................... 136
Eski LOB Veri Tiplerini Dntrmek ........................................................................................137

XML Veri Tipi ve XML Verilerin Tasarlanmas ........................................................................ 138


zel Veri Tipleri ...................................................................................................................... 139

indekiler

17

Hesaplanm Stun................................................................................................................ 141


Hesaplanm Stunu Sabitlemek (Persist Etmek) ....................................................................141

Seyrek Stun ve Seyrek Tablo Kavram ................................................................................. 142


Kullanc Tanml Veri Tipleri ................................................................................................... 142
Kullanc Tanml Veri Tipleri (UDDT) ile almak................................................................... 143

CLR Kullanc Tanml Tipler .................................................................................................. 144


Tablolar Oluturmak ............................................................................................................ 144
Tablo Tasarmnda Satr Boyutuna Karar Vermek .....................................................................145

Tablolar stnde Deiiklik Yapmak..................................................................................... 147


Stun Eklemek....................................................................................................................... 147
Stun Deitirmek ................................................................................................................. 147
Stun Silmek ......................................................................................................................... 147
Tablolarn veya Stunlarn Adn Deitirmek ........................................................................ 148
Tablo Silmek .......................................................................................................................... 148

Geici Tablolarla almak ................................................................................................... 148


Nesnelerin T-SQL fadelerini Almak ...................................................................................... 150
Veritaban Atlyesi 2.3 .................................................................................................... 151

7. NTE: Veri Btnln Salamak ...............................................................153


Veri Btnln Kavramlar ................................................................................................ 153
Tanmlamal Veri Btnl ................................................................................................... 154
Prosedrel Veri Btnl ..................................................................................................... 157
Veri Btnl Teknii Semek ............................................................................................. 157

Veritaban Atlyesi ............................................................................................................... 158


Veri Btnln Gereklemek ............................................................................................ 159
Stun Seviyeli Veri Btnln Salamak ........................................................................... 159
Primary Key Constraint Oluturmak .........................................................................................159
Unique Key Constraint Oluturmak ..........................................................................................161
Default Constraint Oluturmak .................................................................................................162
Default Nesnesi Oluturmak ....................................................................................................163
Check Constraint Oluturmak ..................................................................................................163
Rule Oluturmak ......................................................................................................................165

Tablo Seviyeli Veri Btnln Salamak ............................................................................ 166


Stunlar Aras Check Constraint Oluturmak ...........................................................................166
Foreign Key Constraint Oluturmak ..........................................................................................167
Ardk Btnlk (Cascading Integrity) ...................................................................................... 169

Constraint'leri Ynetmek ...................................................................................................... 171


Constraint'lere Gz Atmak ..................................................................................................... 171
Constraint'leri Silmek ............................................................................................................. 172
Constraint'leri Denetime Kapamak ve Amak ........................................................................ 172

Veritaban Atlyesi .......................................................................................................... 172


Blm Sonu zeti ............................................................................................................ 173
Blm Sonu Tekrar ......................................................................................................... 173

18

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

3. Blm

VERLER SORGULAMAK
8. NTE: Basit Sorgular .....................................................................................175
Kaytlar Semek: SELECT .................................................................................................... 175
En Basit SELECT .................................................................................................................... 176
Sadece Belli Stunlar Semek .............................................................................................. 177
Tekrarlamalar Tekile ndirgemek: DISTINCT .......................................................................... 177

Tretilmi (Calculated) Stunlar ........................................................................................... 177


Aritmetik aretler .................................................................................................................. 177
Stuna Takma Ad (Alias) ....................................................................................................... 178

Matematiksel Fonksiyonlar .................................................................................................. 179


WHERE ile Satrlar Filitrelemek............................................................................................ 180
Karlatrma aretleri ........................................................................................................... 180
Mantksal Operatrler ..............................................................................................................181

NULL Karlatrma............................................................................................................... 183


Aralk Sorgulama: BETWEN.... AND.... ................................................................................. 184
Kaytlar Sralamak: ORDER BY ............................................................................................. 184
Dnen Kayt Saysn Kstlamak: TOP .................................................................................... 186
SQL'DE Karakter ve Tarih lemleri ......................................................................................... 187

Karakter Karlatrmalar: LIKE Deyimi ................................................................................. 187


Joker Karakterler ................................................................................................................... 188
Metinleri Ulamak (Concatenation) ......................................................................................... 190

Balca Karakter Fonksiyonlar ............................................................................................. 191


Tarihleri Sorgulamak ............................................................................................................ 192
Tarih Fonksiyonlar ................................................................................................................ 192

Alt Sorgularla almak................................................................................................... 194


IN ve NOT IN ........................................................................................................................ 195
Tekil Sonular Dndren Alt Sorgular ................................................................................... 195
oklu Sonu Dndren Altsorgular ........................................................................................ 196
Tretilmi Tablolar ................................................................................................................. 197
lintili (Corelated) Altsorgular ................................................................................................. 198
EXISTS, NOT EXISTS ............................................................................................................. 199

Veritaban Atlyesi ............................................................................................................... 200

9. NTE: Tablolar Birlikte Sorgulamak ve zetlemek ......................................201


Tablolar Birletirerek Sorgulamak ................................................................................. 201
Tabloya Takma Ad (Alias) .................................................................................................... 203
Bir Tabloyu Kendisiyle Birlikte Sorgulamak .......................................................................... 203
INNER JOIN ......................................................................................................................... 204

indekiler

19

OUTER JOIN fadeleri ........................................................................................................... 206


LEFT OUTER JOIN.................................................................................................................. 206
RIGHT OUTER JOIN ............................................................................................................... 207
FULL OUTER JOIN ................................................................................................................. 208

CROSS JOIN ........................................................................................................................ 208


SQL Server Asndan JOIN lemleri ................................................................................... 209
JOIN in pucu Kullanmak ..................................................................................................... 210

Fark, Kesiim ve Birleim Bulmak ........................................................................................ 210


Veritaban Atlyesi .......................................................................................................... 212
Verileri Gruplamak ve zetlemek .................................................................................... 214
Gruplamal Fonksiyonlar (Aggregate Functions) ................................................................... 214
GROUP BY Deyimi ................................................................................................................ 216
Gruplamalar stnde art Komak: HAVING ........................................................................ 218
Gruplanm Verileri zetlemek.............................................................................................. 220
CUBE Deyimi ......................................................................................................................... 220
ROLLUP Deyimi ..................................................................................................................... 221
GROUPING ile zetleri Dzenlemek ....................................................................................... 222
COMPUTE BY ve COMPUTE deyimi ....................................................................................... 222

Veritaban Atlyesi 3.2 ......................................................................................................... 223

10. NTE: leri Veri Ynetim Teknikleri .............................................................225


CTE ve Rekrsif Sorgular ...................................................................................................... 225
CTE ........................................................................................................................................ 226
Hiyerarik Sorgu iin CTE'nin Rekrsif Kullanm .................................................................... 228

PIVOT ve UNPIVOT Operatrleri ile Veri Analizi .................................................................... 231


PIVOT .................................................................................................................................... 231
UNPIVOT ............................................................................................................................... 235

Rtbeleme Fonksiyonlar ile Kaytlar Sralamak ................................................................... 236


ROW_NUMBER() .................................................................................................................. 237
Paral Satr Numaralar Vermek ..............................................................................................238

RANK() ve DENSE_RANK() Fonksiyonlar .............................................................................. 239


Sonular n Gruba Ayrmak: NTILE (ifade) .............................................................................. 240

Veri Deiimi Ynetimi ......................................................................................................... 241


Yeni Veri Eklemek Hakknda Pf Noktalar ............................................................................. 241
Sorgu Sonucunu Yeni Tabloda Saklamak .................................................................................242
Bir Sorgunun Sonucunu Varolan Tabloya Eklemek ...................................................................242

Verileri Gncellemek .............................................................................................................. 243


Tablolar Birletirerek Veri Gncellemek ...................................................................................243
Alt Sorgular Kullanarak Veri Gncellemek ................................................................................244

Verileri Silmek ....................................................................................................................... 244


Tablolar Birletirerek Veri Silmek ............................................................................................244
Alt Sorgular Kullanarak Veri Silmek ..........................................................................................245

20

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

TOP fadesi ........................................................................................................................... 246


Etkin Olarak Veri Silmek: TRUNCATE TABLE ............................................................................246

Veritaban Atlyesi 3.3 .................................................................................................... 247


Blm Sonu zeti ............................................................................................................ 249
Blm Sonu Tekrar-6 ...................................................................................................... 249

4. Blm

VER ERMN YLETRMEK


11. NTE: Viewlerle almak...........................................................................251
VIEW'LERLE ALIMAK .................................................................................................. 251
View'lere Neden htiya Duyarz ..................................................................................... 252
View in Alternatifler ............................................................................................................ 252

View Oluturmak .................................................................................................................. 253


Kstlamalar .......................................................................................................................... 254
zinler ve Sahiplik Zinciri ....................................................................................................... 254
Birden Fazla Tablodan Veri eken View'ler ........................................................................... 255
View'leri Ynetmek ......................................................................................................... 256
View stnde Deiiklik Yapmak ......................................................................................... 256
Tanmlanan View'leri Grmek ve Sistem View'leri ................................................................ 257
View Tanmlarn Gizlemek ................................................................................................... 257
View Temel Tablolarnn emasn Kilitlemek: SCHEMABINDING ......................................... 258
View'leri Silmek.................................................................................................................... 259
View'ler ve INSERT, UPDATE, DELETE fadeleri .................................................................... 259
Paral View Yaplar............................................................................................................. 262
Paral Tablolar Oluturmak.................................................................................................. 265
Nesnelere Takma Ad: Synonymuslarla almak ................................................................. 269
Veritaban Atlyesi .......................................................................................................... 270

12. NTE: Indeks Teorisi ...................................................................................271


INDEKSLERLE ALIMAK ............................................................................................... 271
VTYS'ler Indeks'leri Nerelerde Kullanr? ......................................................................... 273
INDEKS MMARS .......................................................................................................... 275
Dengeli Aa (-tree) Yaps ........................................................................................... 276
Heap Yap ......................................................................................................................... 278
Clustered Indeks.............................................................................................................. 278
Nonclustered Indeks ....................................................................................................... 279

indekiler

21

SQL Server Indeks Trleri ............................................................................................... 281


Unique Index ........................................................................................................................ 281
Karma (Composite) Indeks ................................................................................................... 281
Kapsam (Covering) Indeks ................................................................................................... 281
Paral Indeksler ................................................................................................................... 282
Eklenti Stunlu ndeksler ...................................................................................................... 282
Filtreli ndeksler .................................................................................................................... 282
XML Indeksler ...................................................................................................................... 282
Full-Text Indeksler ................................................................................................................ 282
Veri Deiim lemlerinin Indekslere Etkisi .................................................................... 283
FILLFACTOR ve PAD_INDEX Parametrelerine Karar Vermek ................................................ 284
Indeks Tanmlama Yaklamlar ...................................................................................... 284
Clustred Tanmlarken ........................................................................................................... 284
Non-Clustred Indeks Tanmlarken......................................................................................... 285
Veritaban Atlyesi 8.1 .................................................................................................... 286

13. NTE: Indeks Ynetimi ................................................................................289


INDEKS OLUTURMAK ................................................................................................... 289
Unique Index ........................................................................................................................ 291
Kapsam (Covering) Indeks Oluturmak................................................................................. 292
INCLUDE Deyimi ile Eklenti Stunlu Indeks Tanmlamak ...................................................... 293
WHERE Deyimi ile Filtreli ndeks Tanmalak ......................................................................... 293
Indeks Seeneklerini Ayarlamak .......................................................................................... 294
Paral Indeksler Oluturmak ................................................................................................ 296
FILLFACTOR ve PAD_INDEX Parametrelerini Ayarlamak...................................................... 296
View stnde Clustered Indeks Tanmlamak ....................................................................... 297
Indeksler Hakknda Bilgi Almak ...................................................................................... 298
Indeksler stnde Deiiklik Yapmak ............................................................................ 299
Indeksleri Yeniden Derlemek: REBUILD ................................................................................ 300
Indeksleri Yeniden Dzenlemek: REORGANIZE ..................................................................... 300
Indeksleri Kapatmak ............................................................................................................. 301
Indeks Seeneklerini Deitirmek ........................................................................................ 301
Indeksleri Silmek ............................................................................................................. 302
Indekslere Bakm Yapmak............................................................................................... 303
Indekslerin Danklklarn Gzlemlemek .............................................................................. 304
Indeksleri Dzenlemek .................................................................................................... 305
statistiklerin Veri Eriimine Etkisi .................................................................................. 306
statistik Oluturmak ............................................................................................................ 307

22

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

statistikleri Gncellemek ..................................................................................................... 308


Veritaban Performans Aralarn Kullanmak ................................................................. 308
SQL Profiler ile Veritabann Takip Etmek .............................................................................. 308
Database Tuning Advisor ile Veritaban yiletirmesi ............................................................ 310
Veritaban Atlyesi 8.3 .................................................................................................... 314
Blm Sonu zeti ............................................................................................................ 315
Blm Sonu Tekrar-8 ...................................................................................................... 315

5. Blm

T-SQL LE PROGRAMATK ELER KODLAMAK


14. NTE: T-SQL ile Programlar Gelitirmek .....................................................317
Programlama Dili Olarak T-SQL ............................................................................................ 317
Deiken Tanmlama ve Kullanma ......................................................................................... 318
Birleik Operatrler ..................................................................................................................320
Bit Seviye Operatrler ..............................................................................................................321
Kod erisine Aklamalar Eklemek ..........................................................................................322
Global Deikenler ve Sistem Fonksiyonlar .............................................................................. 322

Yn Kavram ve GO blmleyicisi......................................................................................... 323


Print Komutu ............................................................................................................................. 324

Tablo Tipi Deikenler Kullanmak.............................................................................................325


DML ifadeden kt Veri Almak ................................................................................................325

Ak Kontrolleri ...................................................................................................................... 327


IF ... ELSE Karar Yaps .............................................................................................................. 328

CASE Deyimi ...........................................................................................................................330


CASE ile PIVOT Gereklemek .................................................................................................... 331

While Dngs ........................................................................................................................332


BREAK Komutu ......................................................................................................................... 332
CONTINUE Komutu ................................................................................................................... 333

Cursorlerle Veri Ynetimi ...................................................................................................... 333


Transact-SQL Sunucu Cursor'ler ............................................................................................ 334
Cursor'lerin Seeneklerini Ayarlamak ........................................................................................ 340

Cursor'lerle Satrlar Dolamak ............................................................................................... 340


Cursor stnden Kaytlar Dzenlemek ....................................................................................341

Ortak Zamanl (Concurrent) alma ve Cursor'ler .................................................................. 342

Veritaban Atlyesi 5.1 .................................................................................................... 342

15. NTE: Stored Procedure'ler ........................................................................345


Stored Procedure'lerle almak..................................................................................... 345
Stored Procedure'ler Oluturmak .......................................................................................... 349
Stored Procedure' altrmak.............................................................................................. 350
NOCOUNT Oturum Parametresi'nin Kullanm ........................................................................ 352

indekiler

23

Stored Procedure'leri Ynetmek ........................................................................................... 353


Stored Procedure'lerde Deiiklik Yapmak ............................................................................. 353

Stored Procedurelerde Parametrelerle almak ........................................................... 356


Girdi Parametreler (Input Parameter).................................................................................... 356
Girdi Parametre ile Stored Procedure armak ..................................................................... 356
Tablo Tipi Parametre Alan Stored Procedure'ler Kodlamak .................................................... 358
Parametre Geerliliini Denetlemek ....................................................................................... 359

kt Parametrelerle almak .............................................................................................. 361


k Parametrelerini Almak ................................................................................................. 361
RETURN deyimi.................................................................................................................... 362
Modl altrma Balamlar: EXECUTE AS .......................................................................... 364
EXECUTE AS CALLER ............................................................................................................ 365
EXECUTE AS 'kullanici'........................................................................................................... 365
EXECUTE AS SELF ................................................................................................................. 366
EXECUTE AS OWNER ............................................................................................................ 366

Veritaban Atlyesi .......................................................................................................... 367

16. NTE: leri T-SQL Programlama ..................................................................369


SQL Server 2008 T-SQL Ortamn Etkin Kullanmak ......................................................... 369
Dinamik SQL altrmak ...................................................................................................... 369
EXEC Fonksiyonu ile Dinamik SQL altrmak....................................................................... 370
sp_executesql ile Dinamik Sorgu altrmak ........................................................................ 372

T-SQL'de Hata Yakalama Mimarisi ....................................................................................... 373


Sistem Mesajlar: sys.messages ........................................................................................... 373

Sisteme Yeni Mesaj Eklemek ............................................................................................... 374


Sistemden Kullanc Tanml Mesaj Silmek ........................................................................... 376
Hata Mesajlarn Kullanmak: RAISERROR .............................................................................. 376
Parametreli Hata Mesajlar Tanmlamak ................................................................................ 378
Oluan Son Hatann Kodunu Yakalamak: @@ERROR ........................................................... 379

Hata Kontrol ve TRY-CATCH Yaps..................................................................................... 381


Uygulama iin Veritaban Hata Yakalama Mimari Tasarm .................................................. 382
dbo.tbHataGecmis Tablosu ......................................................................................................383
sp$HataYakala Stored Procedure' ..........................................................................................383
sp$HataYazdir Stored Prosedr..............................................................................................384
Hata Yakalama Mimarisi Kullanm rnei ................................................................................385

Veritaban Atlyesi ............................................................................................................... 386

17. NTE: Kullanc Tanml Fonksiyonlar .........................................................387


Kullanc Tanml Fonksiyonlarla almak ..................................................................... 387
Kullanc Tanml Fonksiyonlarla Neler Yapabiliriz.................................................................. 388
Skaler Kullanc Tanml Fonksiyonlar.................................................................................... 388
Tretilmi Stun Olarak Skaler Fonksiyon.............................................................................. 390

24

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Satrdan Tablo Dndren Fonksiyonlar ................................................................................. 391


oklu fade ile Tablo Dndren Fonksiyonlar ........................................................................ 392
Rekrsif Sorgu iin rnek Fonksiyon ..................................................................................... 393

Tablolarla Tablo Tipi Fonksiyonlar Biletirmek: APPLY ........................................................ 395


CROSS APPLY ....................................................................................................................... 396
OUTER APPLY........................................................................................................................ 397

Veritaban Atlyesi ............................................................................................................... 397


Blm Sonu zeti ............................................................................................................ 398
Blm Sonu Tekrar Sorular ............................................................................................ 398

6. Blm

XML LE ALIMAK
18. NTE: Tip Olarak XML .................................................................................399
XML Destei .................................................................................................................... 399
Hibrit Veritaban Gereksinimi ...................................................................................................400

XML Veri Tipini Kullanmak .............................................................................................. 401


Deiken ve Parametre Olarak XML Tipi .............................................................................. 402
Tablolarda XML Veri Tipi ...................................................................................................... 402
Tip Tanmsz XML Veri le almak...................................................................................... 403
Tip Tanml XML Veri le almak ........................................................................................ 403
XSD ve Schema Collections Nesneleri................................................................................... 403
emalar Hakknda Bilgi Almak .................................................................................................405
Tip Tanml XML Stunlar Oluturmak ......................................................................................406

likisel Seviye XML Tanmlamalar Kullanmak ..................................................................... 408


Kstlanm (Constrainted) XML Veri Kullanmak ..................................................................... 408
XML Veri stnde Hesaplanm Stun Tanmlamak ................................................................408

XML Veriyi Ynetmek ve Sorgulamak ............................................................................. 408


Bir Bakta XML Sorgu Dili: XQuery ..................................................................................... 409
XML Veri Tipi Metodlar ....................................................................................................... 413
xml.query (string XQuery) ..................................................................................................... 413

xml.exist (string XQuery) ..................................................................................................... 415


xml.value (string XQuery, string SQLVeriTipi)....................................................................... 415
xml.nodes (string XQuery) ................................................................................................... 416
XML Veriyi Dzenlemek: xml.modify() ................................................................................. 418
insert fadesi ile Yeni Bilgi Eklemek ....................................................................................... 419
delete fadesi ile Bir Bilgi Silmek............................................................................................ 420
replace value of fadesi ile Dm stnde Dzenlemeler Yapmak ....................................... 420

Veritaban Atlyesi ............................................................................................................... 421

indekiler

25

XML Stunlarda Indeks Tanmlamak .............................................................................. 422


Birincil XML Indeks Oluturmak ........................................................................................... 422
kincil XML Indeks Oluturmak ............................................................................................. 423
Deer Temelli XML Indeksler ................................................................................................. 423
Yol Temelli XML Indeksler ..................................................................................................... 423
XML Stunlar stnde Hesaplanm Alan ve likisel Indeksler Tanmlamak ......................... 424

Veritaban Atlyesi ............................................................................................................... 425

19. NTE: XML-likisel Dnmler ................................................................427


likisel-XML Veri Dnmleri ....................................................................................... 427
OPEN XML ........................................................................................................................... 427
FOR XML .............................................................................................................................. 430
RAW Mod ile XML Veri ekmek ............................................................................................ 431
AUTO Modda XML Veri ekmek............................................................................................ 432
EXPLICIT (Bilinli) Modda XML Veri ekmek ......................................................................... 434
PATH Modda XML Veri ekmek ............................................................................................ 436

Veritaban Atlyesi ............................................................................................................... 438


Blm Sonu zeti ............................................................................................................ 439
Blm Sonu Tekrar Sorular ............................................................................................ 439

7. Blm

ORTAK ZAMANLILIK VE TRANSACTION


20. NTE: Transaction'larla almak ve Ortak Zamanllk ..............................441
Transaction ve Ortak Zamanllk ..................................................................................... 441
Transaction Blou Nasl Ele Alnr? ....................................................................................... 443
Transaction Kavram ve Transaction Modlarn Anlamak ...................................................... 443
Harici (Explict) Transaction Modunda almak ................................................................... 444
Harici Transaction Ynetimi ................................................................................................... 444
TRY-CATCH Yaps ile Transaction Hatas Yakalamak ............................................................ 445
Sabitleme Noktalar (Save Points) ......................................................................................... 447

Dahili (Implicit) Transaction Modu ve Ynetimi .................................................................... 448


Ortak Zamanll ve zolasyon Seviyelerini Anlamak ............................................................ 448
zolasyon Salamak ............................................................................................................... 448
Ortak Zamanl (Concurrent) Eriim Anomalileri ...................................................................... 449

zolasyon Seviyeleri .............................................................................................................. 450


Snapshot izolasyon Seviyesi ve Satr Versiyonlama ............................................................. 455
Transaction Bazl Snapshot zolasyon .................................................................................... 456
fade Bazl Snapshot zolasyon............................................................................................... 458
Snapshot zolasyonun Kazanm ve Maliyetleri ....................................................................... 459

Veritaban Atlyesi ............................................................................................................... 459

26

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

21. NTE: Kilitlenmeleri Ynetmek ...................................................................461


Kilitlemeleri Ynetmek .................................................................................................... 461
Kilitlemeleri Gzlemlemek ............................................................................................... 461
Management Studio ile Kilitlenmeleri Takip Etmek ve Process ldrmek .............................. 464

Zaman Am Ayarlamak ................................................................................................. 465


Tablo Seviyeli Kilitlemeler ............................................................................................... 466
Kilitleme pucu Vermek .......................................................................................................... 466

Kilitleme kmaz: Deadlock ............................................................................................ 467


Veritaban Atlyesi ............................................................................................................... 468

22. NTE: Triggerlar ..........................................................................................469


TRIGGER'LARI KAVRAMAK ............................................................................................. 469
Trigger Ne Zaman Kullanlmaldr .................................................................................... 470
Trigger Ne Zaman Kullanlmamaldr ............................................................................... 471
Klasik Trigger'n zellikleri ve Kstlamalar ........................................................................... 471
Trigger'lar Nasl alr? ........................................................................................................ 472
TRIGGER OLUTURMAK.................................................................................................. 472
INSERT Trigger'i .............................................................................................................. 475
DELETE Trigger'i .............................................................................................................. 477
UPDATE Trigger'i ............................................................................................................. 478
INSTEAD OF Trigger' ...................................................................................................... 480
KOMPLEKS TRIGGER'LAR................................................................................................ 482
Nested Trigger'lar Tanmlamak ....................................................................................... 482
Recursive Trigger Tanmlamak ....................................................................................... 483
DDL Trigger'lar................................................................................................................. 483
Veritaban Seviye DDL Trigger'larla almak ....................................................................... 484
Sunucu Seviyeli DDL Trigger'lar ........................................................................................... 487
TRIGGER YNETM......................................................................................................... 488
Trigger'lar Silmek ........................................................................................................... 488
Veritaban Seviyeli DDL Trigger'lar Silmek ............................................................................ 489
Sunucu Seviyeli DDL Trigger'lar Silmek ................................................................................ 489

Trigger'lar Tepkimeye Kapatmak ................................................................................... 489


Veritaban Atlyesi ............................................................................................................... 490
Blm Sonu zeti ............................................................................................................ 491
Blm Sonu Tekrar ......................................................................................................... 491

indekiler

8. Blm

27

SQL SERVER NDE CLR


23. NTE: CLR Genel .........................................................................................493
CLR ile almak .............................................................................................................. 493
SQL Server erisinde CLR .............................................................................................. 495
Assembly Kavram ............................................................................................................... 496
Kodlarn Kaynak Eriim Haklar ............................................................................................. 496
.NET Assembly'leri SQL Server'a Yklemek .......................................................................... 497
T-SQL ile CLR Arasnda Seim Yapmak ................................................................................ 501
Veritabannda Assembly Ynetimi........................................................................................ 502
Assembly'ler Hakknda Bilgi Almak........................................................................................ 502
Assembly'leri Deitirmek ve Silmek ..................................................................................... 503
Assembly'ler stnde Deiiklik Yapmak.................................................................................503
Assembly'nin eriini Deitirmek ..........................................................................................503
Assembly'nin Seeneklerini Deitirmek .................................................................................504
Assembly Deiikliinin Verilere Etkisi...................................................................................... 505

Assemblylere Ek Kaynaklar Eklemek ve kartmak ..................................................................505


Assembly'leri Silmek................................................................................................................506

SQL Server iin CLR Bileenler Programlamak ..................................................................... 507


Visual Studio'da SQL Server Projesi Oluturmak .................................................................... 507

Veritaban Atlyesi-8.1 ......................................................................................................... 510

24. NTE: Basit Rutinler ....................................................................................511


SQL Server ierisinde Basit CLR Rutinleri Kodlamak ..................................................... 511
SQL Server iin CLR Ktphanelerini Anlamak ..................................................................... 511
T-SQL ve CLR Tip Geii: System.Data.SqlTypes .................................................................. 512
SQL CLR iin Veri Salayclar ............................................................................................... 513
SqlContext ...............................................................................................................................514
SqlConnection..........................................................................................................................515
In-Process (Dahili lem) ve Out-Of-Process (Harici lem) Kavramlar ...................................... 515

SqlCommand ...........................................................................................................................517
SqlParameter ...........................................................................................................................517
SqlPipe ....................................................................................................................................518
SqlDataReader .........................................................................................................................520
SqlDataRecord .........................................................................................................................520
SqlTransaction .........................................................................................................................521
System.Transaction .................................................................................................................522
SqlTriggerContext ....................................................................................................................522

CLR Stored Procedure'ler Oluturmak................................................................................... 522


CLR'da RETURN Deyimi ile SP'den Deer Dndrmek ........................................................... 524
Stored Procedure'ler ile Transaction Kullanm ....................................................................... 526

CLR Trigger'larla almak .................................................................................................... 526

28

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

CLR Kullanc Tanml Fonksiyonlar Oluturmak .................................................................... 528


Skaler Tipli Kullanc Tanml Fonksiyonlar.............................................................................. 530

Veritaban Atlyesi ............................................................................................................... 532

25. NTE: leri Rutinler ......................................................................................533


CLR ile leri Rutinler Kodlamak........................................................................................ 533
Tablo Tipli Kullanc Tanml Fonksiyonlar Kodlamak ............................................................. 533
Kullanc Tanml Grupsallar Oluturmak ............................................................................... 535
Serializable Kavram ve Gereksinimi ...................................................................................... 537

CLR Kullanc Tipleri Oluturmak ........................................................................................... 540


Veritaban Atlyesi ............................................................................................................... 544
Blm Sonu zeti ............................................................................................................ 545
Blm Sonu Tekrar Sorular ............................................................................................ 545

9. Blm

VERTABANI YETENEKLERN GELTRMEK


26. NTE: Bal Sunucularla almak .............................................................547
Datk Sunucularla Balant Tanmlamak ...................................................................... 547
Bir Bal Sunucu Tanmlama ve Ynetme ............................................................................. 548
Bal Sunucularda Gvenlik ve Eriim .................................................................................. 550
Datk Sorgularla almak ............................................................................................ 551
Bal Sunucular stnden Datk Sorgular altrmak ....................................................... 551
Datk Sorgularda Transaction ve MSDTC........................................................................... 553
Doalama Datk Sorgular (Ad-Hoc Distributed Queries)................................................... 553
Veritaban Atlyesi .......................................................................................................... 554

27. NTE: likisel Olmayan SQL Server Yetenekleri........................................555


HierarchyID Veri Tipini Anlamak ..................................................................................... 555
Hiyerarik veriye kavramsal bak ........................................................................................ 555
HierarchyID Veri Tipi ve Metotlar ....................................................................................... 556
Hiyerarik Veriyi Eklemek ..................................................................................................... 557
Bir Dmn Atalarn Listelemek ........................................................................................ 558
Bir Dmn ocuklarn Listelemek .................................................................................... 560
Bir Dmn Ana Dmn Deitirmek ........................................................................... 560
Bir Seviyedeki Dmleri Dndrmek .................................................................................. 561
Bir Dmn Altna Dm Eklemek.................................................................................... 562
Uzaysal Veri Trlerini Anlamak ....................................................................................... 563
Uzaysal Veri Kavram ve Corafi Bilgi Sistemlerine Genel Bak ........................................... 563

indekiler

29

Uzaysal Veri Tiplerine Genel Bak ....................................................................................... 564


Uzaysal Veri Tipleri Metotlar................................................................................................ 565
Uzaysal Veriyi Kaydetmek .................................................................................................... 566
Uzaysal Veriyi Sorgulamak ................................................................................................... 567
Alan Bulmak .......................................................................................................................... 567
Kesiim Bulmak ..................................................................................................................... 568
Mesafe Bulmak ..................................................................................................................... 569

Veritaban Atlyesi ............................................................................................................... 570

28. NTE: Service Brokers ................................................................................571


Service Brokers Mimarisini Anlamak ............................................................................. 571
Service Broker Altyapsnn Salad Baz nemli zellikleri................................................ 573
Bir Veritabannda Service Broker Desteini Amak .............................................................. 573
Service Broker Nesnelerini Anlamak.............................................................................. 574
Service Broker Nesneleri ...................................................................................................... 574
Type ...................................................................................................................................... 574
Contract ................................................................................................................................ 575
Queue .................................................................................................................................... 576
Service Program .................................................................................................................... 577
Service .................................................................................................................................. 577

Servisleri Konuturmak ........................................................................................................ 577


Dialog (Diyalog) Nesnesi ve Mesajlamay Anlamak ............................................................. 577

Service Broker Uygulamas Gereklemek ...................................................................... 579


Gerekli Nesnelerin Oluturulmas ......................................................................................... 580
Kullanc Kayt lemleri Servisinin Kodlanmas ..................................................................... 580
E-Posta Servisinin Bileenlerinin Kodlanmas ....................................................................... 582
Servislerin Aktifletirilmesi ................................................................................................... 587
Servislerin almalarnn Test Edilmesi ve Gzlemlenmesi .................................................. 587
Veritaban Atlyesi ............................................................................................................... 588
Blm Sonu zeti ............................................................................................................ 589
Blm Sonu Tekrar Sorular ........................................................................................... 589

10. Blm STEMC TARAFTA SQL SERVER ERM PROGRAMLAMA


29. NTE: ADO.NET Temelleri ...........................................................................591
stemci Taraf Veritaban Uygulamalar Gelitirmek........................................................ 591
ADO.NET 2.0' Kavramak ................................................................................................. 592
Online (Bal) Veri Eriim Modeli .......................................................................................... 592

30

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

SqlConnection ....................................................................................................................... 594


Balant Havuzlama (Connection Pooling) ................................................................................. 596

SqlCommand ile Veri Ynetimi............................................................................................... 596


SqlDataReader ve SqlServer'dan Veri ekmek .........................................................................598
SqlParameter ...........................................................................................................................599
SQL Server 2005'de MARS Desteini Kullanmak .....................................................................602
Youn Veri Kopyalamak: SqlBulkCopy .....................................................................................604

Veri Deiimini Ynetmek ...................................................................................................... 606


SqlTransaction ile stemci Tarafl Transaction Ynetimi ...........................................................608
CLR Kullanc Tanml Tipleri stemci Tarafta Kullanmak ...........................................................612
Xml.XmlReader Snf ve stemci Tarafta Balantl XML lemleri ............................................613

Veritaban Atlyesi .......................................................................................................... 616

30. NTE: ADO.NET'de Kopuk Veri Ynetimi ....................................................617


Offline (Kopuk) Veri Eriim Modeli .................................................................................. 617
DataSet Nesne Modelini Anlamak ......................................................................................... 618
DataTable ve Veritabanndan Veri ekmek...............................................................................619
DataTable'larda Veri Btnl ve Constraint'ler ....................................................................... 620
DataSet ierisinde Birden Fazla DataTable likilendirme ve Relations Kavram ........................ 621

SqlDataAdapter ile Kopuk Modelde Veri Eriimi ................................................................... 622


Kopuk Modelde Veri Deiimini Ynetmek ............................................................................ 625
DataTable Asndan Veri Deiimi ..........................................................................................625
Deiimleri Veritabanna Geri Yanstmak .................................................................................627

ASP.NET Uygulamalar ve Veri Balamaya Hzl Bak .................................................. 630


Veritaban Atlyesi ............................................................................................................... 637

31. NTE: SQL Server Management Objects'i Kullanmak ................................639


SMO Nesne Modelini tanmak ............................................................................................. 640
SMO Nesne Modelini Uygulamalarda Kullanmak ................................................................. 640
Server Nesnesininin zelliklerini Almak ................................................................................. 642
SMO ile Veritabannda Nesneleri Ynetmek .......................................................................... 644
Yeni Bir Nesne Oluturmak ......................................................................................................644
Var Olan Nesneyi Deitirmek .................................................................................................645
Nesne Silmek...........................................................................................................................645

SMO Utility Class'lar Kullanmak ............................................................................................ 646

Veritaban Atlyesi ............................................................................................................... 647


Blm Sonu zeti ............................................................................................................ 648
Blm Sonu Tekrar Sorular ............................................................................................ 648

indekiler

EK A

31

VERTABANI PROGRAMCILARINA PULARI


SQL SERVER'DAN DAHA FAZLA YARARLANMAK.......................................................... 649
Veri Sunum Katman Hakknda ............................................................................................. 649
Veri Eriim Katman Hakknda .............................................................................................. 649
Veritaban Ynetimi .............................................................................................................. 649
SQL Server'in Dier Yetenekleri Hakknda............................................................................. 650
Reporting Services ................................................................................................................ 650
Veri Ambarlama ve OLAP ...................................................................................................... 650
SQL Server Integration Services (SSIS) ................................................................................. 650

XML Stunlar Full-Text Aramaya amak ............................................................................. 651


SQL SERVER'DE VER ALIVER ................................................................................... 651
Veri Dosyalaryla Veritabann Tamak: Attach-Deattch ...................................................... 652
Uygulama Verilerini Yedeklemek ve Yedekten Geri Dnmek Hakknda ................................... 652

BCP ile Metin Dosyalarndan Veri Alverii ......................................................................... 655


SQL Server Import and Export Wizard Kullanarak Veri Aktarm ........................................... 657
Replication ........................................................................................................................... 660
SQL Server 2000 veya 2005 Veritabann SQL Server 2008'e Aktarmak Hakknda ....... 661
Aktarm Seenekleri ............................................................................................................. 661
GVENLK VE YETKLENDRME HAKKINDA ................................................................... 663
Genel Gvenlik nlemleri ..................................................................................................... 663
Hassas Bir Uygulama iin Veritaban Gvenlik Kontrol Listesi .............................................. 664
SQL Enjeksiyonu ve Kar nlemler ....................................................................................... 665
Tektrnak Saldrlar ...................................................................................................................665
Hata Verdirmeye Dayal Saldrlar.............................................................................................666
Stored Procedure Kullanan Saldrlar ........................................................................................667
Genel SQL Enjeksiyon'larndan Korunma Tedbirleri...................................................................668
Sadece yileri Kabul Etmek ........................................................................................................ 668
Ktleri Reddetmek................................................................................................................... 668
Ktleri Filitreleyerek Kabul Etmek ............................................................................................ 668

EK B

C# VE OOP KILAVUZU
C# LE PROGRAMLAMAYA GR KILAVUZU ................................................................ 669
C# ile Merhaba Dnya......................................................................................................... 669
Snflar Yazmak ..................................................................................................................... 670
Deikenler Deerler ve Veri Tipleri ....................................................................................... 672
Tr Dnmleri ......................................................................................................................674
Deer ve Referans Tipler Aras Dnm: Boxing ve Unboxing ................................................ 675

32

Yazlmclar in SQL Server 2008 ve Veritaban Programlama


Dngler ve Karar Yaplar ........................................................................................................675
if-else Karar Yaps .................................................................................................................... 676
for Dng Yaps........................................................................................................................ 676
while Yaps .............................................................................................................................. 676

Nesnelerle almak............................................................................................................. 676


Snflarda Eriim Seviyelerini Anlamak ................................................................................... 677
Yapc (Constructor) Kavramn Anlamak ............................................................................... 679
Metodlar Ar Yklemek....................................................................................................... 681
Static Kavramn Anlamak ..................................................................................................... 682
zetle Nesneye Dayal Programlama ..................................................................................... 684

3n Katmanl Mimari ve Snflarn Rol................................................................................... 685


Katman Tasarlamak ......................................................................................................... 685
Katmann Tasarlamak........................................................................................................ 686
Sunum Katmann Tasarlamak ............................................................................................... 691

EK C: BLM SONU SORU CEVAPLARI .............................................................695


EK D: DKKAN VERTABANI EMASI ................................................................705

EK E

CD KULLANIM KILAVUZU
CD Kullanm Klavuzu....................................................................................................... 707
Aralar ................................................................................................................................. 707
SQL Server Express Edition ................................................................................................... 707
SQL Server 2008 Bileenleri .................................................................................................. 707

rnek Veritabanlar ve Kurulumlar ....................................................................................... 707


SQL Server Veritaban Srm Ykseltme Klavuzu ................................................................ 708
alma Dkmleri ............................................................................................................... 708
Kaynaka ......................................................................................................................... 709
Dizin ................................................................................................................................. 711

Giri
Kitap kapsamnda veri ileme ile ilgili iki temel standarttan bahsedilmekte; SQL ve
XML. SQL veritaban sorgulamak iin kullanlan bir dil olup, ANSI tarafndan kabul
edilmi bir standarttr. Standardn tam metnini farkl yllardaki gzden geirilmi halleriyle birlikte, ANSI'den satn alabilirsiniz. Bunun iin http://webstore.ansi.org adresinde
SQL kelimesini aratn ve kan ekrandan dilediiniz standart iin karl olan creti
dedikten sonra PDF dosyasna sahip olabilirsiniz. Standartlarn bazlarna cretsiz de
ulaabilirsiniz. Genel olarak SQL, veritaban ynetim sistemine verilerle ilgili ifadeleri
bildirmek ve sonularn almak iin kullanlabilen bir standart tanmdr.
XML, yazlm ve donanmdan bamsz veri tama ve saklama standard olup eXtensible
Markup Language (Geniletilebilir aretleme Dili) kelimelerinden elde edilmi bir ksaltmadr. XML ile iaretlenmi bir bilgi, bir cep telefonunda bir PC'de gsterildii kadar kolay gsterilebilir. XML ayrca farkl platformlarda alan uygulamalar arasnda veri paylam iin ve
HTML'den arndrlm olarak bilgilerin Web'e almas iin de kullanlr. XML de verinin grnm ve sunumu ile ilgilenen iaretleme dili HTML (Hiper Metin aretleme Dili) gibi
SGML (Standard Generalized Markup Language)'den tretilmitir. SGML ok geni bir dil
olduundan Web'de tam olarak kullanlmas olduka zordur. Bu nedenle bu trden gelitirmelere gidilerek amaca zel kstl elemanlardan oluan iaretleme dilleri elde edilmitir. XML
standardnn son haline www.w3c.org/TR/XML adresinden cretsiz olarak ulaabilirsiniz.
Veritaban Programlama Hakknda
Herhangi bir dil (C#, VB.NET, Delphi, C++, Java) ile yazlm ve en basitinden dz
metin dosyasna eriip ierisinde verilerini saklayan ve daha sonra eriip bu verileri okuyan uygulama bir veritaban uygulamasdr. En gelimi anlamda veritaban uygulamas,
milyonlarca satrdan oluan tablolar yneten ve raporlayan uygulamalardr. N katmanl
yaklamda en alt katmana Veri katman denir ve bu katman veritabanna karlk gelir.
Uygulamalarda veritaban kullanlmasndaki temel hedef, veri ile onu ileyen yazlmnn
birbirinden soyutlanmas ve veri eriimi, raporlama gibi ilemlerin hzlandrlmasdr. Veritaban ayrca veriye eriimi izne balar ve veri gvenliini salar.
Genellikle, kurumlarn eitli kaynaklardan rettikleri verileri ynetmelerini salamak
zere gelitirdikleri uygulamalar, verilerini veritaban ortamnda saklar. Veritaban ortam, stne ina edilen uygulamann verilere daha hzl erimesini, raporlamasn salayarak performans art ve kolay veri ynetim ortam salar.
Kurumsal ihtiyalar erevesinde gelitirilen programlar iin yazlan kodlarn dnda, veritaban ile etkileim ve veritaban seviyesinde karar mekanizmas gelitirme gibi amalar
iin veritaban programlama kullanlr. Gncel veritaban programlamada kullanlan veritaban seviyeli diller, SQL, XML ve Nesne sorgulama dili standartlar erevesinde ekillenmitir.
Kitabn erdii rnekleri Test Edebilmek in
"Yazlmclar iin MS SQL Server 2008 ve Veritaban Programlama" kitabnn ierdii
rnekleri test edebilmek iin, sisteminizde standart olarak kurulumu yaplm SQL Ser-

34

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

ver 2008 Developer Edition olmas yeterlidir. Yer yer, Books Online(ksaca BOL) ad verilen SQL Server 2008 yardm kitabna atfta bulunulmu olabilir. Kitapta ele alnan projeye ait dosyalar, CD ieriinde bulabileceiniz gibi, destek sayfalarndan indirebilirsiniz.
Ayrca www.microsoft.com/sql adresinden cretsiz indirebileceiniz 180 gnlk(ki yarm
yl demek) cretsiz SQL Server 2008 Enterprise Edition da kitap ieriini test etmek iin
fazlasyla yeterli bir SQL Server srmdr.
Kitapta verilen kodlamalar, aksi belirtilmedii srece 'Management Studio' ad verilen
SQL Server istemci aracnn Query ekranlar kullanlarak test edilebilir.
Birikim Gereksinimleri
Kitap ierii, programlama dnyasna yeni adm atm ve Microsoft temelli yazlm gelitirme ortamn renmeyi amalam okurlar iin dzenlenmitir. Bunun dnda bir veritaban ynetim sistemi iin temel bilgileri verebilecek bir kitap olsa da ek bir adaptasyon
sreci gerektirebilir.
Kitap ierii, SQL dnda bir uygulama gelitirme dili gerektiinde bunun C# olmas
durumuna gre dzenlenmitir. Bu nedenle C# dili hakknda yzeysel bir birikiminizin
olmas, kitap kapsamn bir rpda sindirebilmeniz iin faydal olabilir. Daha nce bir dil
ile uygulama gelitirdiniz ama C# size biraz yabanc geliyorsa, kitabn ek ksmlar size yol
gsterecektir. Hibir dil bilmeden bu kitaba balyorsanz, yer yer bir C# kitab ile desteklenmesinde yarar olabilir.
Kimlere Hitabediyor
Kitap, ASP.NET ve/veya .NET ile SQL Server 2008 stnde uygulama gelitirenlere hitap etmektedir. Bilgisayar Mhendisliklerinde okutulan 'Veritaban Ynetim Sistemleri',
Endstri Mhendisliklerinde veya Ynetim Biliim Sistemlerinde okutulan 'Veritaban
Tasarm ve Gerekleme' derslerine asl veya yardmc kitap olarak kullanlmas mmkndr. Ayrca, programlama dnyasndan daha nce haberdar olan ve programlamaya
bir orta ve byk lekli veritabann uygulamas tasarlamay zerek balamak isteyenlere yol gstermek zere hazrlanmtr.
Ancak kitap programlama hakknda hibir altyaps olmayanlar iin hazrlanm ve her
eyi hibir ey bilmeyen biri iin en batan alan bir kaynak deildir. Programlama hakknda hi bir deneyiminiz olmamas halinde, kitabn kapsam sizin iin ar ve anlamsz
gelebilir.
Yine, bir uygulama gelitirmek isteyenler iin, bu kitab tek bana yeterli kaynak olarak
grmek iyi bir seim olmaz. Kitap, bir veritabanna bal uygulama gelitirmenin arlkl
olarak veri katmann, fikir verecek kadar da veri eriim katmann ele almaktadr. Dier
katmanlar iin baka kaynaklarla birlikte takip edilmesi gerekebilir.
Farkl Balang nerileri
Kitab yapacanz ie ve birikiminize gre farkl noktalardan balayarak okuyabilirsiniz.
Bu konuda aadaki tablo size yol gstermek zere dzenlenmitir.

Giri

Yaptnzyapacanz i
Balang Seviye SQL
Server 2005-2008 Veritaban Programcs
leri - Orta Seviye SQL
Server 2005-2008 Veritaban Programcs

Daha nceden
Bilmeniz gerekenler

Kitab kullanmak iin neri

likisel Veritaban
Hakknda genel bilgi

1. lk blm sizi veritaban ortamna altracaktr.


2. Ek-A'daki teknikler veri tamanz kolaylatrabilir.

SQL Server 2000 veya


edeeri bir VTYS ile
proje gelitirmi olmak

1.
2.
3.
4.
5.

Raporlama Uzman

Raporlama Ortamnz
Kullanmak

SQL Server 2005 Programclar iin Yenilikler

SQL Server 2000 Programlamay iyi seviyede


bilmek

SQL Server 2008 Yenilikler SQL Server 2005 Programcs

35

SQL Server 2005 yenilikleri hakknda fakir sahibi deilseniz ilk 3 blme gz atn
Takip eden 4 blmden ihtiyacnz olanlar okuyun
C# veya edeeri bir dil bilmiyorsanz EK-B'yi okuyun
8. Blm okuyun
Veritaban ortamnda servis temelli bileenler kurgulamanz gerekiyorsa 9. blm
okuyun.
6. stemci taraf uygulamalar gelitirme konusunda fikir edinmek iin 10. blm okuyun
1. SQL Server 2008'e veya likisel Veritaban Kavramna yabanc iseniz 1.blme gz
atn
2. SQL ifadelerini yazmakta glk ekiyorsanz 3. Blm okuyun
3. Baz sorgularnz hzlandrmak veya basitletirmek iin 4. Blm okuyun
4. Sorgularnzda sunucu tarafl programatik bileen gereksinimleriniz varsa 5. Blm
okuyun.
5. Sunucu tarafl bileen ihtiyacnz arttka takip eden blmlerden uygun olanlara da
gz atabilirsiniz.
1. lk blme gz gezdirin ve yeni eklenen servisler, eski servislerin yeni isimleri hakknda fikir sahibi olun
2. 2.2'de yeni veritaban seenekleri hakknda
2.3'de yeni tiplerin kullanm hakknda
2.4'de yeni veri btnl seenekleri hakkndaki deiikliklere gz atn.
3. 3.2.3'de yer alan veri sorgulamaya dair yeniliklere gz atn
4. 3.3'n ilk konusunu okuyun
5. 4.1'de paral tablolar bahsini okuyun
6. 4.3'de yeni indeks seeneklerine gz atn
7. 5.2'de rutinleri bakalarnn adna altrmak bahsine gz atn
5.3'de TRY-CATCH yapsn renin.
5.4'n son iki baln okuyun
8. 6.Blmn tamamn okuyun
9. 7.1.2'yi okuyun
10. 8.Blmn tamamn okuyun
11. 9.Blmn tamamn okuyun
12. 10.Blmn ilk iki nitesindeki yeniliklere gz gezdirin.
13. 10.3'n tamamn okuyun.
14. Veritabannz SQL Server 2000'den 2005'e aktaracaksanz, EK-A'daki ipular
bahsine gz atn.
1. SQL Server aralarna gz atn. SAC'n yeni yerini renin
2. 6.nite'de Sparse column zelliine bakn
3. 8.nite'de Tarih Zaman tipi ile ilgili yenilikleri okuyun
4. 9.nite'de Gruplanm verileri zetlemek bahsini okuyun
5. 10.nite'de VALUES ifadesi ile oklu satr retimine ve MERGE ifadesine gz atn
6. 13.nite'de filtreli indekslere ve sktrlm indeks kullanmna gz atn
7. 14.nite'de T-SQL deiken tanmlama ve operatr yeniliklerine gz atn
8. 15.nite'de Tablo Tip parametre alan Stored Procedure konusuna gz atn
9. 18.nite'de XQuery ve let ifadesine gz atn
10. 27.nite'de hiyerarik ve uzaysal veri tiplerine gz atn. XML Web Service destei
kaldrlacak zellik olarak iaretlendii iin kitaptan kartld.

36

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Kitap Neler eriyor


Kitap genel olarak veritaban programlama konusunu ele almakta. Konu, bir veritaban
ynetim sisteminin tantm yapmaktan te, onu bir veritaban ynetim sistemi olarak
nasl programlayabileceiniz noktasnda ele alnmakta. Elbette veritaban programlamaya
dair ne varsa bu kadar sayfada anlatmak mmkn deil. Burada, bir veritaban uygulamasn gelitirme srasnda gerekli bilgileri balangtan itibaren aama aama ele alarak,
basitlik ve yalnlk kstlar dhilinde yeni bir yazlm gelitiriciye temel veritaban disiplinlerinin aktarlmas hedeflenmekte.
Veritaban Kavramna Giri

Bu blmde, temel olarak ilikisel veritaban kavramlar ve SQL Server'n temel bileenleri ele alnmakta. Arkasndan gelecek blmlerdeki ifadeleri anlayacak kadar T-SQL dilinden bahsedilmekte.
Veritaban Tasarm

Bu blmde, sfrdan bir veritaban projesinin nasl tasarlanacana dair fikir edinmeye alacaz. Arkasndan, bir veritaban nesnesinin zelliklerinin belirlenmesi ele alnmakta. Son
olarak, tablolarn hangi kurallara gre tasarlanaca ele alnmakta. Veritaban tasarm, kavramsal, mantksal ve fiziksel olmak zere aamal bir sre ierisinde ele alnmakta.
Veri Sorgulama

Bu blmde, bir tablodan verilerin nasl ekilebileceinden balanp, tablolarn birlikte


sorgulanmas, verilerin zetlenmesi, CTE ile rekrsif sorgularn yazlmas ve verilerin sraya sokulmas gibi ilemler ele alnmakta. zellikle raporlar gelitirmeniz gerekiyorsa bu
blmdeki niteyi kavramak sizin iin elzem olabilir.
Veri Eriimini yiletirmek

Verileri sorgularken, performans artna gereksinim duyarz. Bu durumda alnabilecek


nlemler bu blmde incelenmekte. Yava alan raporlarnz varsa, veritabanna gelen
sorgular takip etmeniz ve iyiletirme konusunda SQL Server'dan fikir almak istiyorsanz,
bu blme gz atmanz faydal olabilir.
T-SQL ile Programatik eler Kodlamak

T-SQL dilini bir programlama dili olarak renmek, bylece SQL Server 2005 ierisinde ihtiyaca binaen kodlar yazmak istiyorsanz bu blmdeki niteler size yol gsterecektir. Kodlarnz veritabannda tekrardan kullanm amal olarak kaydetmek ve veritaban seviyeli kodlarnzdaki hatalar daha sonra gzlemlemek zere takibata almak bu blmde ele alnmakta.
XML ile almak

Veritabannda XML veri saklamak ve XML veri stnde yaplabilen ilemlerle ilgili
programatik konular bu blmde ele alnmakta. Gerektiinde tablolarnzdaki verileri
XML'e dntrerek ekmek ve XML verilerinizi tablolara aktarmak da burada ele
alnmakta.

Giri

37

Ortak Zamanllk ve Transaction

Veritaban ierisinde birden fazla ilemin mantksal olarak ayn anda olmu gibi yrmesini salamanz gerekiyorsa, transaction bloklar kullanmak sizin iin kanlmaz olacaktr. Bu blmde, transaction bloklar oluturmak, transaction bloklarn birbirinden izole
etmek ve veri deiimlerine duyarl T-SQL programcklar gelitirmek ele alnmakta.
SQL Server 2008 iinde CLR

Bu blme balamadan nce en azndan yazlm kodlar anlamlandracak kadar C# bilginizin olmas gerekir. ayet daha nce hi C# veya benzeri bir dil ile program gelitirmedi iseniz,
kitabn Ek-B ksmna gz atmanz yararl olacaktr. Blm ierisinde, C# dilinin ve Microsoft. NET ortamnn T-SQL'e yardmc bir enstrman olarak kullanlmas ele alnmakta.
Veritaban Yeteneklerini Gelitirmek

Bu blmde, veritabannzdan daha fazla yararlanabilmeniz iin yapabileceiniz programsal ilemler ele alnmakta. Bu erevede, SQL Server'n bir veri ynetim merkezi olarak
kullanlmas ve text, Excel, Access, baka veritaban ynetim sistemleri ierisindeki verileri tek bir merkezden ynetmesi iin ayarlamalar yapmak ele alnmakta.
Ayrca, SQL Server 2008 ile birlikte eklenen Hiyerarik ve Uzaysal Veritipleri ele alnmakta.
Yine bu blmde, Servis Temelli Programlama kapsamnda, birbirinden bamsz alan
ama gerektiinde birbirini tetikleyen SQL Server ierisinde program bloklar oluturmay
ele alacaz.
stemci Taraftan Veritaban

Bu blm de yine 'lmeyecek kadar' C# bilgisi gerektiren bir blm. stemci taraftan veritaban eriimi konusunda yeni balam programclara fikir vermek ve vizyon izmek
iin kitaba eklenmitir.
Ayrca, SQL Server 2008'e veri dnda ynetimsel hedefler iin eriimde bulunacak uygulamalarn gelitirilmesi iin gerekli ktphaneler de bu blmde ele alnmakta.
EK A - Veritaban Programclarna pular

Elinizdeki kitap her ne kadar geni kapsaml bir veritaban programlama kitab olsa da,
veritaban programlama aamasnda ihtiya duyacanz temel ilemlerden konunun ak
ierisinde yer verilememi olanlar burada toparlanarak, bilginize sunulmutur.
EK B - C# ve OOP Klavuzu

Henz C# ve OOP ile yeterince vakit geirmemiseniz bu nite size gerekli yzeysel bilgiyi vermek zere dzenlenmitir.
EK C - Dkkan Veritaban emas

Kitap ierisinde srekli olarak kullanlan Dukkan veritabannn bu blmde bir emas
verilmitir. Yer yer bu emaya gz atmak veritaban yapsn kavramak adna ilerinizi kolaylatrabilir.

38

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

EK D - Blm Sonu Soru Cevaplar

Kitap ekinde gelen CD'nin ierii ve kullanm konusunda bu blmde bilgi bulabilirsiniz.
EK E - CD Kullanm Klavuzu

Kitap ekinde gelen CD'nin ierii ve kullanm konusunda bu blmde bilgi bulabilirsiniz.
Gsterimler ve erik Dzeni Hakknda
Kitap ierisinde, kodlar daktilo formatnda verilmitir. ki farkl ekilde rnek kodlar yer
almaktadr: Forml-aklama niteliinde olan kodlar ve altrlabilir kodlar. Formlaklama niteliindeki kodlarda satrlarn banda dey izgi yer almamaktadr. Ayrca,
yerine bir eyler yazmanz gereken yerler, alt izgili olarak verilmitir. Bunun dnda, {}
arasna alnan yerler, mutlaka bir eyler yazmanz gerektiini gsterirken, [] ierisindeki
ifadelerin istee bal olduunu ifade eder. | iareti veya anlamnda olup bir yere yazlabilecek alternatifleri belirtmek iin kullanlmaktadr.
Bu trden kodlar dorudan altramazsnz!
Forml seviyesindeki {gsterimler[dir]}

altrlabilir kodlarn banda dey bir izgi yer almaktadr. Ayrca, altrlabilir kodlar ierisinde vurgulanmasnda yarar grlen ifadeler koyulatrlmak suretiyle, daha hzl
grmeniz salanmaya allmtr.
alabilir kodlar gstermektedir.

pucu: Burada bahsedilen ey, hayati derecede nemli olmasa da programlama yaparken hayatnz
kolaylatracak nitelikte olabilir veya konunun anlatm bozmamak adna yzeysel ele alndn
detaylarn nerede bulabileceinizi gsterir.

Dikkat: Burada bahsedilen eyler, hayati derecede nemlidir. Dikkat edilmemesi halinde veri kayplarna neden olabilir veya teknii tam olarak uygulayabilmeniz buralar gzden karmamanza baldr.
Kaynak Dosyalar Destek ve Geri Bildirim
www.verivizyon.com/sql2008 adresinde kitap ve kapsam hakknda ek bilgiler, kaynak
dosyalar ve sunumlar bulabilirsiniz.
Kitap hakkndaki fikirlerinizi dorudan yaynevine iletebileceiniz
ygozudeli@verivizyon.com adresinden okumaktan byk zevk duyarm.

gibi,

Birinci Blmden EK A'ya Kadar Olan


31 nite Basl Halde
Kitap erisinde Bulunmaktadr.

EK A

VERTABANI PROGRAMCILARINA PULARI


Bu ksmda, veritabann daha etkin kullanabilmek iin ihtiya duyacamz, ama kitap ak
ierisinde, ak datmamak adna yer verilememi nemli hususlarn zeti yer almakta. Bu
erevede SQL Server 2000 ve 2005'teki verilerinizi 2005'e aktarma konusu da ele alnmakta.
Ayrca blm ierisinde size eitli gereksinimleriniz iin ufuk amay hedefleyen, gerek duyduunuzda baka kaynaklardan detaylandrmanz gereken nemli hususlara yer verilmitir.

SQL SERVER'DAN DAHA FAZLA YARARLANMAK


Veri Sunum Katman Hakknda
SQL Server 2008 ile parelel zamanlarda Microsoft tarafndan duyurulan Silverlight ve
WPF gibi arayz tanmlama teknolojilerini yakndan takip etmenizde yarar var. nk
ilerleyen zamanlarda bu iki teknolojinin vektr temelli, estetik kullanc arayzleri gelitirmekte hayli yaygn bir kullanm bulaca ngrlmekte.
Veri Eriim Katman Hakknda
SQL Server'a eriim iin Entity Framework ad verilen ve Microsoft tarafndan gelitirilen
Nesne-likisel Veri Eleme(ORM veya Object-Relational Mapping) ktphanelerini kullanarak kolayca eriebilirsiniz. Bu ktphane, ilikisel veritabann bir nesneler kmesi imi gibi
otomatik olarak projelerinizden sorgulama ve deitirme olana salamaktadr.
Ayrca, Microsoft tarafndan eitli ortamlardaki verilerin SQL'e benzer bir sz dizimi ile
sorgulanmas salayan LINQ ktphanesini, hafzadaki bilgilerinizi sorgulamak iin; bu
ktphanenin bir alt ktphanesi olan LINQ to SQL ktphanesini kullanarak, veritabanndaki tablolara bir nesneler kmesi gibi eriim salayabilirsiniz.
Bu iki ktphaneyi zellikle u ama iin tercih edebilirisiniz:
SQL Server verileri ilikisel bir ortam olduu iin tablolarda tutar. C# gibi bir dil ile gelitirdiiniz kullanc arayzleri vs. veritaban dndaki kodlama ortamlar genellikle nesne tabanldr ve nesne temelli bir veri modeli kullanrlar. Nesne temelli veri modelinin
ilikisel temelli bir veri ortamnda saklanmas veya ilikisel verinin nesne modeline dntrlmesi, program gelitirirken ek maliyet olarak karnza kar. te bu iki ktphane, sizin yerinize nesne-tablo dnmlerini yaparak maliyetlerinizi azaltr.
Veritaban Ynetimi
Veritabannda yedek alma, yedekten dnme, hata kurtarma, Replication yaplandrma,
Mirroring ve Clustred olarak sunucular paralel altrma gibi konularda bilgi gereksiniminiz
varsa, SQL Server Ynetimi ile ilgili bilgi kaynaklarna gz atmanzda yarar olabilir.

650

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

SQL Server'in Dier Yetenekleri Hakknda


Notification Services ile Veri Datm Abonelikleri Kurgulamak iin Notification
Services bileenini yaplandrabilirsiniz. Bu servisi verilerinizdeki belli deiimlere abone
olan kullanclarnza olay dahilinde eitli kanallardan mesaj iletmek iin yaplandrabilirsiniz. Ayrntl bilgi iin Notification Services hakknda bir kitap okuyabilirisiniz.
Reporting Services

SQL Server 2005 iin gelitirilen "Reporting Service" adl program, SQL Server 2000 ile
de uyumlu olarak kullanlabilmektedir. Bu ara sayesinde, Web Sayfas, PDF, Excel gibi
ortamlara verilerin raporlar aktarlabilmektedir. cretsiz olan bu arac olarak rapor sunucusu olarak kullanabilirsiniz.
Veri Ambarlama ve OLAP

Veri Ambarlama, Veri Madencilii ve OLAP gibi konular hakknda ayrntl bir almaya
gereksinimizin varsa, bu konuda yazlm kitaplara bavurabilirsiniz. SQL Server'in Enterprise
Srmnde yeralan Analysis Services bileenleri bu konuda size destek olacaktr.
OLAP konusunda, ciddi bir alma planlyorsanz, SQL'in yan sra MDX (ok boyutlu
fadeler- multidimentional Expretions) konusunda da bilgi edinmeniz gerekecektir.
SQL Server Integration Services (SSIS)

SQL Server 7.0'dan bu yana kullanlagelen Data Transformation Services SQL Servre
2005'den itibaren yeniden ekillendirilerek SSIS ad verilmitir. SSIS ile veri btnletirme zmleri gelitirmede kullanlr. SSIS veri birletirme ve dnm paketleri oluturmak iin grafik arayzler, sihirbazlar ve aralar ierir. Veri ak paketleri programlarken, FTP ile veri ekme ve ver gnderme, e-mail mesajlar gnderme gibi ek destekler
salar. Ayrca SSIS bileenlerine, SMO gibi programsal olarak erimek mmkndr.
ayet veritabannza dzenli olarak eitli kaynaklardan veriler aktarmanz veya rutin
olarak veri dnm ilemleri yapmanz uygulamanzn bir paras olacaksa SSIS programlama konusunda ayrntl bilgi edinmeniz gerekebilir.
ekil A.1:
Integration
Services'in dier
servislerle olan
8
ilikisi

ekil http://msdn.microsoft.com/ adresinden alnmtr.

Ek A: Veritaban Programclarna pular

651

XML Stunlar Full-Text Aramaya amak


TEXT, NTEXT veya XML gibi LOB trden bir stun stnde, metin aramalar iin etkin bir
yol olan full-text aramalar yaplabilmesi, full-text indeks tanmlanmas ile mmkndr.
rnek Durum 1:
u ekilde bir tablo ierisinde kitap ierikleri olsun.
CREATE TABLE tbKitapDetay
(kitapKod INT PRIMARY KEY,
xKitap XML)

Basit bir Full-text indeksini u ekilde tanmlayabiliriz:


Bir tabloda Full-text indeks oluturmadan nce, katalog oluturmak iin bir clustred indeks tanmlamak gerekir.
Burada, PK__tbKitapDetay__1A14E395 ad ile bir indeks, SQL Server tarafndan, bizim birincil anahtarmz gereklemek iin otomatik oluturuldu. Siz de oluturulan
anahtara ait indeksin tam adn renmek iin,
sp_helpindex tbKitapDetay

sorgusunu altrdktan sonra, bu ismi grebilirsiniz.


CREATE FULLTEXT CATALOG ft AS DEFAULT
CREATE FULLTEXT INDEX ON dbo.tbKitapDetay ( xkitap )
KEY INDEX PK__tbKitapDetay__1A14E395

Ardndan, bu indeks stnden bir CONTAINS sorgusunu u ekilde gerekletirmek


mmkndr:
SELECT R . xKitap . query ( '//bolum' )FROM ( SELECT kitapKod ,
xKitap FROM tbKitapDetay WHERE contains ( xKitap , 'veritabani'
)) R ( kitapKod , xKitap )
ekil A.2:
Full-Text arama
ileminin sonucu

pucu: Contains yaps ile XML veri Full-text arama iin sorgulanrken, XML elemanlarnn etiketleri ve
znitelikleri (tags, attributes) bir filtreden geirilerek, aramaya yanstlmaz.
SQL SERVER'DE VER ALIVER
SQL Server'de zaman zaman verileri bir yerden bir yere aktarma gereksinimi doabilir. SQL
Server bu konuda bir ok yntem sunar. Burada zet olarak bu yntemleri ele alacaz.

652

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Veri Dosyalaryla Veritabann Tamak: Attach-Deattch


Herhangi bir veritaban'n bir sistemden baka bir sisteme aktarmanz gerektiinde, bu iki sunucu arasnda dorudan bir iletiim kurulamyorsa veya kurulmas zorsa, SQL Server
2005'den veritabann take offline mens ile hizmet d hale getirip, ilgili veritabanna ait
(*.mdf, *.ldf veya *.ndf uzantl) dosyalar kopyalayarak bir dier sisteme aktarabiliriz.
Dier sisteme aktarlan bu iki veya daha fazla dosya, databases sa tklandktan sonra,
"all tasks\attach" databeses mens kullanlarak, gerekli kontrolleri otomatik yaptrlp,
yeni sunucuda bir veritaban olarak kullanma hazr hale getirilebilir.
pucu: Bir veritabannn sadece nesnelerini almak iin script oluturma seeneini tercih edebilirsiniz.
Veritaban nesnelerinin script'lerini almak hakknda bilgiyi "Tablolar Tasarlamak" balkl nitede
bulabilirsiniz.
Uygulama Verilerini Yedeklemek ve Yedekten Geri Dnmek Hakknda

Bir uygulama gelitirilip gerek verilerle almaya baladnda, uygulamaya dair dzenli
bir yedek alma politikas gelitirmek gerekir. rnein, en basitinden bir UPDATE veya
DELETE ileminde, WHERE art koymay unutsak btn veriler ayn deere eitlenir ve
veri kayb meydana gelir. Gelitirdiiniz uygulamann altrld ortamn hassasiyetine
gre birka satr iin bu kaybn pek nemi olmayabilir ama milyonlarca satra hitabeden
bir uygulama iin bu durum bir felakettir. Bu trden durumlarda, yedek indirmek kanlmaz bir hal alr.
Ayrca, yedek almak transaction log dosyasn otomatik olarak boaltt iin gereksinim
duyabilirsiniz.
Yedek almadan nce, SQL Server iin bir yedekleme aygt (device) tanmlam olmanz
gerekir. Yedekleme aygt, disk olabilecei gibi, type trnden bir yedekleme nitesi de
olabilir.
Bir yedekleme aygt duruma gre u ifadelerle tanmlanabilir:
-- disk ortamnda yedekleme aygt tanmlamak iin
sp_addumpdevice 'disk' , 'diskyedekAygiti' ,
'E:\SQLBackups\Full.bak'
--yedekleme nitesinden aygt tanmlama
sp_addumpdevice 'tape' , 'kasetYedekAygiti' , '\\.\tape0'
-- a stnde baka bir bilgisayarn yedekleme aygt olarak
tanmlanmas
sp_addumpdevice 'disk','agYedekDiskAygiti',
'\\Netsunucu\SQLBak\TLog.bak'

Daha sonra, yedek aygtlar hakknda bilgi almak gerektiinde u genel ifade altrlabilir:
sp_helpdevice

Ek A: Veritaban Programclarna pular

653

Yanllkla tanmlanm bir yedekleme aygtn silmek mmkndr:


---Yedekleme Aygt silinsin ama yedek dosyalar kalsn
sp_dropdevice 'FullBackupDevice'
--!!! Ayn anda yedek dosyas da gider!...
Sp_dropdevice 'FullBackupDevice' , 'DELFILE'

pucu: Yedekleme aygtn, Enterprise Manager'den Management\Backup' sa tklanarak [New


Backup Device] seenei ile de oluturup, silebilirsiniz
Yedek almak iin Management Studio\Object Browser'dan ilgili veritabann sa tklayn. lgili ynergeleri takip ederek, kolayca yedek alabilirsiniz. (Hi anlamyorsanz, sadece "Next" butonlarn tklayarak ilerleyin.)
ekil A.3:
Veritabannzn
her ihtimale kar
yedeini almanz
faydal olur.

ekil A.4:
Yeni bir Veritaban yedei hedefi
tanmlamak olduka kolaydr.

654

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Ayrca, yedek almak T-SQL ifadeleri ile de mmkndr:


Daha nceden bir yedekleme aygt tanmlamadan diske dorudan yedek almanz gerekiyorsa, u rnekteki gibi bir ifade kullanabilirsiniz:
BACKUP DATABASE Northwind TO DISK = 'D:\Temp.bak'

Veya daha nceden tanmladnz bir yedekleme aygtna yedek almak iin aadaki
rnektekine benzer bir ifade kullanabilirsiniz:
BACKUP DATABASE Northwind TO NorthwindFullBackup

Bir uygulamann log dosyalarn T-SQL ile yedeklemek iin:


BACKUP LOG Northwind TO NorthwindTLogBackup

Log dosyalarn silmeden yedekleme yapmak iin:


BACKUP LOG Northwind
TO NorthwindTLogBackup WITH NO_TRUNCATE

Dier yedekleme seenekleri iin BOL'a bakabilirsiniz.


Ardndan indirmek istediiniz veritaban nesnesini sa tklayp, "Tasks\Restore
\Database" seeneini tklayarak, ilgili ayarlamalara ihtiya duyuyorsanz yaptktan sonra,
duymuyorsanz hibir ilem yapmadan "OK" butonunu tklayarak veritabann, yedek aldnz hale geri dndrebilirsiniz.
ekil A.5: Veritabanndaki verilerde bir sorun
kmas halinde,
alnan yedekleri
indirerek en son
yedek aldnz
zamandaki duruma geri dnebilirisiniz.

T-SQL ifadeleri ile de yedekten dnmek mmkndr. Bu durumda da veritabanna eriimin


kstlanm olmas gerekir. Bu trden ilemler iin genel ifadeleri u ekilde verebiliriz:

Ek A: Veritaban Programclarna pular

655

Dorudan bir yedekleme dosyasndaki yedei indirmek iin:


RESTORE DATABASE Northwind FROM DISK = 'C:\SQLBackups\Temp.bak'

Bir yedekleme aygtndaki yedekten geri dnmek iin:


RESTORE DATABASE Northwind FROM NorthwindFullBackup

pucu: Genellikle bir veri bozulmas sonucunda yedekten dnmeniz gerekirse, asl veritabannn yanna
ikinci bir veritaban olarak yedeklerinizi indirip verilerinizi karlatrmak, sadece bozulan verileri
eski veritabannzda deitirmek, dier verilerinizi kald yerden devam ettirmek akllca olabilir.
SQL Server stnde veritabann deployment (programn kullanlaca yere yerletirilmesi)
amal tarken, yedek alp yedei tamay da tercih edebilirsiniz. SMO ile bir veritaban yedek
alma programnn C# ile nasl kodlanabilecei SMO ile ilgili nitede yeralmaktadr.
BCP ile Metin Dosyalarndan Veri Alverii
BCP bir komut satr aracdr. Verileri dosyalara aktarmak veya dosyalardan veri almak
iin kullanlabilir.
BULK INSERT ile bir instance'dan veri dosyalar araclyla veri alnabilir. Ancak verilerin satr ve stunlardan oluan bir formatta ve dzmetin veya binary olarak veri dosyasna aktarlm olmas gerekir. Toplu olarak veritabanna alnan veriler, eski verilere eklenirken, Bir SQL Server instance'i tarafndan veri dosyasna aktarlan toplu kaytlar, eski veri dosyasn sildikten sonra yeniden kaytlar veri dosyasna aktarabilir.
pucu: Toplu (Bulk) olarak veritabanna aktarlan veriler, veritabannda daha nceden bulunmayan bir
tabloya aktarlamaz. Ama veritabanndan veri dosyasna aktarm esnasnda, ad geen dosya
yoksa oluturulur.
Veri dosyas ile veritabanndaki tabloda yer alan stunlarn ayn srada veya sayda olmas bir zorunluluk deilken veri aktarlacak stunlarn zde olmas gerekir. rnein, INT
kabuleden bir stuna harf eklemeye almak hataya neden olacaktr.
Toplu olarak bir veritaban ile bir veri dosyas stnde veri alverii yaparken, u haklarn verilmi olmas gerekir:

Veritabanndan veri dosyasna aktarm iin, tablolar stnde SELECT hakk

Veri dosyasndan veritabanna veri aktarrken, tablo stnde SELECT ve INSERT hakk

rnek Durum 2:
Markalarmzn yerald tblMarka tablosundaki kaytlar, marka.txt dosyasna aktarmamz gerektiini dnelim ve bunu bcp ile gerekletirelim
bcp dukkan.dbo.tblMarka out marka.txt -c -T

656

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

ekil A.6:
bcp arac kullanlarak, bir tablodaki
verilerin dardaki
bir metin dosyasna aktarlmas.
lgili dosya, ifadeler alrken
bulunulan dizinden grlebilir.

Tablonun tam yolunun verildiine dikkat edin. out deyimi, veri aktarm ileminin veritabanna gre ynn tayin etmektedir. marka.txt verilerin aktarlaca veri dosyasdr. c karakter formatta aktarm yaplacan gsterir. T eriim iin gvenli balant
(Trusted Connection) kullanlacan gsterir.
Verileri bu ekilde aktardktan sonra marka.txt dosyasna notepad gibi bir programla
gzatabilirsiniz.
marka.txt dosyasnda yeralan kaytlar, bcp kullanarak veritabanna aktarmak mmkndr.
Bunun iin tblmarka2 adnda bir tablonun daha nceden oluturulduunu varsayarsak:
bcp dukkan.dbo.tblMarka2 in marka.txt -c -T

demek yeterli olacaktr. Burada, out kelimesinin in olarak deitiine dikkat edin.
Bu ilem, BULK INSERT yntemi kullanlarak, Query Analyzer gibi bir T-SQL ortamndan da gerekletirilebilir.
USE dukkan
BULK INSERT tblMarka2
FROM 'c:\documnents and setings\ygozudeli\marka.txt'
WITH (DATAFILETYPE = 'CHAR')

Her iki yntemde de tablonun nceden oluturulmu olmas gerekir. Burada, WITH deyiminden sonra, DATAFILETYPE parametresi kullanlarak, verilerin bulunduu format
belirtilmektedir.
Tablo A.1:
Bulk Insert parametreleri

BULK INSERT
Parametresi

BCP
Parametresi

Aklama

NATIVE

-n

Native formattaki bir veri sadece bcp tarafndan okunabilir.


Native ile kastedilen, veritabannn verileri saklad formattr.
Hzl ekilde bir yerden bir yere veri aktarmak iin kullanlabilir.

CHAR

-c

Karakter veri formatn belirtmek iin kullanlr. Tab'larla ayrlm satrlar halinde saklanr. Veri, bcp dnda Excel gibi baka
bir program tarafndan da ele alnacaksa tercih edilebilir.

WIDECHAR

-w

CHAR'dan farkl olarak verileri unicode standardnda ele alr.

WIDENATIVE

-N

Karakterle ifade edilmeyen stunlar, veritabannn kulland formatta, metin (varchar, char, nvarchar ve ntext, text vs.)
stunlar ise Unicode formatnda saklamak iin kullanlr.

Ek A: Veritaban Programclarna pular

657

SQL Server Import and Export Wizard Kullanarak Veri Aktarm


SQL Server Import and Export Wizard, SSIS aralarndan biri olup hzl ve kolay bir ekilde SSIS paketleri oluturabileceiniz gibi, MS Access, baka bir SQL Server, Excel,
virglle blnm dz metin dosyas gibi veri kayaklar ile veri al-verii yapabileceiniz
bir aratr.
rnek Durum 3:
Daha nceden, bir dz metin dosyasnda yer alan dviz kaytlarmz, SQL Server'e aktarmak istiyoruz.
1.

Management Studio'da ilgili veritabann sa tklayn ve alan menden,


Tasks\Import Data seeniini tklayn.

2.

Uygun olan kaynak seilir. rnein biz dz metin dosyasna (*.txt) balanacaz.

ekil A.7:
Data ImportExport Wizard'n
balatlmas

ekil A.8:
dovizler.txt dosyasnn veri kayna olarak seilmesi

658

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

ekil A.9:
Columns sekmesinden stunlar
grebilirsiniz.
Advenced sekmesinden stunlarn
adn ve tipini,
stun silme ekleme gibi ilemleri
yapabilirsiniz.

3.

Uygun olan hedef seilir. rnein metin dosyasndan SQL Server'e veri alacaksak,
hedef SQL Server'dir.

4.

Kaynakta var olan tablolar getirilir ve kullancnn hangi tablolar aktarmak istedii
sorulur. stediiniz tablolar iaretleyin.

ekil A.10:
Hedef olarak SQL
Server ierisindeki
dukkan veritabannn seilmesi

ekil A.11:
Kaynaktaki
verilern hedefte
hangi tablo(lara)
aktarlacana
karar verin.

Ek A: Veritaban Programclarna pular

659

ekil A.12:
Daha nceden var
olan bir nesne
varsa, hangi
stunun hangi
stuna aktarlacan eleyebilirsiniz. Edit SQL
butonu ile nesne
oluturma scripti
stnde deiiklik
yapabilirsiniz.

5.

ekil A.13:
Elde edilen veri
aktarm plan iin
son ayarlamalar
yapn.

ekil A.14:
Veri aktarm
ilemi zet ekran.
Her eyin yolunda
olduunu kontrol
edin ve Finish
butonunu tklayn.

Hemen altrmak iin Execute Immediately seeneini kullann. Paket oluturup daha
sonra da bu veri tama ilemini kullanacaksanz, SSIS paketi olarak sakla seeneini
uygun saklama ortamn ve hassas verilerin saklanmas ile ilgili nlemleri ayarlayn.

660

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

6.

Bir sonu ekran ile size ka tablonun aktarld gsterilecektir.

SQL Server'den baka bir formata veri aktarmak iin de yaplmas gereken ilemler ayndr. Deien tek ey hedef ile kaynak trlerinin deimesinden ibarettir.
ekil A.15:
lemlerin altrlmasn raporlayan sonu ekran.

pucu: SSIS'i programlamak ve datk veri kaynaklarnz arasnda dnm, aktarm ilemlerinizde daha
fazla kullanabilmek iin http://msdn.microsoft.com/sql/bi/integration/ adresine gz atabilirsiniz.
Replication
Replication, ayn anda birbiri ile balantl ve her biri veri retebilen siteler (birimler) arasnda anlk olarak verilerin aktarlmas iin salanm bir VTYS zelliidir. Bu zelliin kurgulanmas ve gereklenmesi, daha ok veritaban ynetimi konular arasnda yer almakta.
Replication ile canl olarak veri aktarm ilemleri sadece SQL Server-SQL Server arasnda olmak durumunda deildir. SQL Server, heterojen replicaiton'a destek salar. Gerektiinde, bir MS Access, Oracle, Sybase gibi sunucularla da verileri uygulama alr durumda iken bir birimden baka bir birime aktarabilir.
Replication ile verilerin bir birimden baka bir birime datlmas iki temel terime dayaldr;
publication (yayn) ve subscription (abonelik). Aslnda bu iki kavram, gnlk hayatta bir dergi ve
bu dergiye abone olmak eklinde dnldnde hi de yanl bir model kurgulanm olmaz.
Bir publication, gnlk hayatta dergide olduu gibi, article (makale)'lerden oluur. Her bir makale, bir tablo aktarm tanm olarak ele alnabilir. Publication'n dier sunuculara iletilebilmesi
iin, publication yapan sunucu (primary side-birincil taraf)'a dier sunucularn abone olmas gerekir. Bu ileme de subscription denir. Ancak abonelik gnlk hayattaki ile biraz farkldr. Bir
abonelik sadece bir tek makale iin olabilecei gibi, yayndaki btn makalelere de olabilir.
Publication'n stnde tanml olduu sunucuya publisher (yaync) denir. Bu yaynlara
abone olan sunuculara ise subscriber (abone) denir.
Distributor (datc) Bir sunucudur. Bu sunucu, veri gemiini ve transaction'lar tutar.
tercih edilen replication yntemine gre, publisher veya subscriber stnde de
yeralabilir. Bu verileri subscriber'lere datr.

Ek A: Veritaban Programclarna pular

661

SQL Server, publisher, subscriber ve distributor'n durumuna gre 4 temel replication


mimarisine destek verir. Bunlardan tanesinde, distributor iin bir ayr sunucu kullanlmazken, a hznn dk olmas veya maliyetinin yksek olmas halinde, maliyeti
azaltmak zere, tek publisher ile birlikte ayrk distributor kullanlabilir.

Central Publisher, multiple Subscribers

Multiple Publishers, multiple Subscribers

Multiple Publishers, single Subscriber

Single Publisher, remote Distributor

pucu: Master, tempdb, Model, msdb gibi Sistem veritabanlar ve syslogins, sysobject... vs sistem
nesneleri replication tarafndan aktarlamaz.
SQL Server, 3 temel Replication Metoduna Destek verir:
1.

Snapshot Replication: Birincil taraftaki verileri belli peryotla alr ve ikincil taraftaki
verilerin stne yazar. Bir birincil anahtar stuna gereksinim duymaz. Default olarak, Mssql\Repldata dizininde yer alan veriler, gereksinim olduunda CD gibi offline ortamda da ilgili sitelere aktarlabilir.

2.

Transactional Replication: En bata bir snapshot alnarak balatlr. ok az bir gecikme ile deiimler dier sitelere datlabilir. Deiikliklerin ezamanl olmas ihtiyac iin iyi bir yaklamdr.

3.

Merge Replication: Verilerin ayn anda iki sunucuda deitirilmesine msaade edebilen bir yaklamdr. Herhangi bir sunucuda yaplan deiiklik, dier tarafa yanstlabilir. Her iki kaynakta da deitirildii iin akan kaytlar iin standart veya deitirilebilir zmler nerebilir. zellikle balantnn nitelikli olmad mobil cihazlar iin tercih edilebilir.

SQL Server 2000 veya 2005 Veritabann SQL Server 2008'e Aktarmak Hakknda
Konu burada fikir vermek maksatl, kk veritabanlar iin nasl yaplabileceini anlatmak
zere ele alnmtr. Daha byk ve kritik uygulamalarda, verilerinizin yan sra btn bir sistemin upgrade edilmesi gerektiinde ok daha karmak bir sre ortaya kmakta. Bu trden
bir sreci nasl ele alabileceiniz ve planlayabileceiniz konusunda ayrntl bilgiyi,
www.microsoft.com/sql adresinde "SQL Server 2008 Upgrade Technical Reference Guide"
aratarak bulabileceiniz SQL2008UpgradeTechnicalReferenceGuide.docx adl dokmanda bulabilirsiniz. Ayrca CD ierisinde bu dokmann bir PDF kopyas yer almaktadr. Burada
anlatlanlar, bu dokmann bir zeti olarak derlenmitir.
Aktarm Seenekleri
SQL Server 200 veya 2005'de kurulu Bir sistemi SQL Server 2008'e aktarmak iin iki
farkl temel strateji mevcuttur:

Yan Yana Aktarm(Side-by-side Upgrade)

662

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Bu trden bir aktarmda, eski srmn yanna yeni bir SQL Server 2005 instance'i kurularak, eski sistemin varln devam ettirmesinin yannda yeni bir veritaban ynetim sistemi stnden devam edilebilir hale getirebilirsiniz.

Yerinde Aktarm(In-Place Upgrade)

Bu trden bir aktarmda, eski srmn alt yere dorudan SQL Server 2005'i kurabilirsiniz. Ancak eski sistem tamamyla yok olduu iin sadece yeni sistemi devam ettirebilirsiniz.
Tablo A.2:
SQL Server
2000/2005'ten
2008 srmne
gei iin yerinde
ve yan yana
aktarm stratejilere
bal karakteristiklerin karlatrlmas.

Karakteristik

Yerinde Aktarm

Yan Yana Aktarm

Sonu SQL kurulum (instance)


says

Sadece bir adet

ki adet (eski ve yeni


instace)

Gerekli server says

Bir adet

Bir veya daha fazla

Veri Dosyas Transferi (mdf, ldf)

Otomatik

El ile

Sunucu SQL instance ayarlamas

Otomatik

El ile

Destek Aralar

SQL Server
Farkl aktarm ve veri transKurulum Program fer metodlar

Her iki temel stratejinin de kendine gre avantaj ve zaaflar olsa da yan yana aktarm yerinde
aktarma gre genellikle tercih edilir. Yerinde aktarm sadece test temelli veya ok kk,
kritiklii bulunmayan uygulamalarda, daha az kaynak kullanm iin tercih edebilirsiniz.
Ayrca, 32 Bit SQL Server srmlerinden 64 Bit SQL Srmlerine gei gibi komplike parametrelere bal aktarm seeneklerini yukarda bahsi geen dokmanda bulabilirsiniz.
Upgrade etmeniz gereken ey, sadece veritaban ise bunun iin pratik olarak birka yntemden birini tercih edebilirsiniz.

Eski server'in stnde direk SQL Server 2008 kurarak upgrade edebilirsiniz. Bu durumda
gerekli dosya dnm ilemlerini SQL Server yapar ancak eski sisteme dnme ihtimaliniz
varsa, SQL Server 2008'i yeni bir instance olarak kurmanzda fayda olabilir.

SQL Server 2000-2005'te aldnz bir yedei SQL Server 2008'de restore edebilirsiniz.

SQL Server 2000-2005'teki mdf ve ldf dosyalarn deattach edip, SQL Server
2008'e getirip attach edebilirsiniz.

pucu: Bu durumda SQL Server 2008 otomatik olarak dosyalarn dnmn yapacaktr. Ancak bu
trden bir veri dnmnden sonra veritabannzn uyumluluk seviyesi (Compability Level) 80
veya 90(SQL Server 2005 ise) olacaktr. Yani 8.0 ile edeer zellikleri kullanabilirsiniz.
SQL Server 2008'e has zellikleri kullanabilmeniz iin, uyumluluk seviyesini 10.0 srm edeeri olan 100'e getirmeniz gerekir.

Dikkat: Bu tr bir upgrade'de dosyalar tekrardan eski srme attach edemezsiniz!

Eski sunucu dururken yeni bir SQL Server 2008 kurup verilerinizi SSIS ile aktarabilirsiniz. Ancak bunu yaparken ok fazla nlem almanz gerekebilir.

Ek A: Veritaban Programclarna pular

663

Basit bir Attach- Deattach ilemi iin Adm Adm Upgrade u ekilde olabilir
1.

SQL Server 2008'i kurun

2.

SQL Server 2000-2005'deki veritaban dosyalarnz kopyayabilmek iin ncelikle


ilgili veritaban dosyalarnn hangi yolda olduunu renin. Enterprise manager'den
veritabann sa tklayp doyalar sekmesinden bunu grebilirsiniz.

3.

lgili veritabann deattach edin.

4.

Belirlediiniz veritabanna ait dosyalarnz SQL Server 2008'in data dosyalarnn


bulunduu dizine kopyalayp yaptrn.

5.

SQL Server 2008'den ilgili dosyalar attach edin.

6.

Arkasndan yeni veritabannda aadaki dzenlemeleri yapn:

a.

SQL Server 2000-2005'deki veritabannda geerli bir uygulama kullancs varsayd,


bunu SQL Server 2008 dosyasnda da greceksiniz. lgili veritaban kullancsn silin

b.

SQL Server 2008'de uygulama eriimi iin gerekli sunucu seviyeli login bilgisini tanmlayn

c.

Arkasndan bu login bilgisinin tanan veritabanna eriecek kullancsn oluturun


ve yeteri kadar hak verin.

d.

SQL Server 2008'e aktardnz veritabannn uyumluluk seviyesini Management


Studio'dan veritabann sa tklayarak, veritaban zelliklerinden gerekli seviyeye
getirin. Geri dn yapma ihtimaliniz varsa 80 uyumlulukta kalabilir ama kesin olarak SQL Server 2008 kullanacaksanz 100 yapmanz daha avantajl olacaktr.

GVENLK VE YETKLENDRME HAKKINDA


Kitabn konusu, gvenlik'ten uzak olsa da bir programc olarak, gvenlie ihtiyac olan
hassas bir proje stnde alyorsanz, size SQL Server iin alnabilecek gvenlik nlemleri hakknda fikir vermesi asndan, bu blm hazrlanmtr.
Genel Gvenlik nlemleri
Microsoft tarafndan yerine getirilmesinde fayda grlen 10 gvenlik nlemi burada zet
olarak ele alnmtr: Her bir nlem hakkndaki ayrntl ve aklayc bilgiyi,
www.microsoft.com/sql adresinden edinebilirsiniz.
1.

En gncel Service Pack'leri takip edip kurulumunu yapn.

2.

Sisteminizi cretsiz olan MBSA kullanarak aklara kar denetleyin.

3.

Windows Authentication Mode'u kullann.

4.

SQL Server'inizi izole edin ve dzenli olarak yedek almay ihmal etmeyin

5.

Gl bir sa ifresi kullann.

6.

SQL Server Service'lerinin ayrcalk seviyesine snrlama getirin

7.

Firewall'nz varsa, SQL Server'e ait portlar dardan eriime kapatn. TCP port
1433 ve UDP port 1434 SQL Server tarafndan kullanlmaktadr.

664

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

8.

NTFS gibi gl dosya sistemlerini tercih edin.

9.

Kurulum parametreleri veya eski setup dosyalarn silmeyi ihmal etmeyin.

10. SQL Server'e erien uygulamalarnz ve kullanclarnz denetleyin.


11. Veritaban tasarm yaparken, emalar ve ema bazl yetkilendirmeyi kullann.
Hassas Bir Uygulama iin Veritaban Gvenlik Kontrol Listesi
1.

Asla yazdnz kodun gvenli olduuna kendinizi inandrmayn. Unutmayn ki her


geen gn yeni saldr teknikleri gelimektedir. Uygulamanzdaki gvenlik aklarnn bakalarndan duymanz, sizin anzdan ok daha ac neticeler dourabilir.

2.

Uygulamanzn veri yazma ve veri okuma ilemleri iin stored prosedrler dnda veritabanna erimediinden emin olun. Asla Ad-Hoc sorgu olarak kullanlmak zere,
uygulamaya T-SQL kodlar gmmeyin. Bu gvenliin yan sra uygulamanzn sorgu
sresini de ksaltma, karmaklatrma gibi dezavantajlar da beraberinde getirir.

Stored Procedure'leriniz ierisinde EXEC deyimi ile dardan parametre ile alnan statik
SQL ifadeleri altrmaktan kann.
Stored Procedure'leri, Transact-SQL kullanarak dorudan altrmak yerine, ADO veya
ADO.NET'in salad bir ara nesne kullanarak parametre aktarn (command nesnesi).
3.

sa kullanc adn sadece veritaban ayarlar ve nesne oluturma ilemleri iin SQL
Server'in kendi istemci programlar (Enterprise Manager, Query Analyzer, osql vs.)
ile balanrken kullann. Uygulamalarnzn veritabanna erimesi iin asla kullanmayn. sa kullancsnn, bo veya kolay bir ifreye sahip olmadndan emin olun.

4.

SQL Server stnde mmkn olduunca az hesap bulundurun. Unutmayn kullanc arttka eriim denetimi de zorlar. Gereksiz hesaplar varsa silin. Her bir hesabn, gerekenden daha fazla haklara sahip olmadndan emin olun.

5.

Uygulamalarnzn bir standart kullanc ile SQL Server'e erimesi gerekiyorsa, uygulamaya zg bir kullanc oluturun. Bu kullancya verilen haklarnn asgari seviyede olduundan emin olun hatta 1. adm uyguladnz ise, sadece stored prosedrlere eriim
izni verin, asla tablolara dorudan eriim izni vermeyin. Kullancy, SQL Server kullancs ya da yerel sistem kullancs olarak tanmlamak yerine domain kullancs olarak tanmlayn. Kullancy btnleik (Entegrated) kullanc olarak yetkilendirin.

6.

SQL Server makinesi ile Uygulama sunucusu arasnda IPSec tanmlamas yaparak
baka makinelerden ayn hesabn SQL Server'e balanmasn kstlayabilirsiniz. Gereksiz bal sunucu varsa, kaldrn.

7.

Uygulamann Veritabanna eriimi iin bir balant ifadesi kullanyorsanz, mutlaka


ifreli olarak saklayn. Bunun iin Windows Registry'i kullanabilirsiniz. DPAPI gibi
arayzler, ifreleme iin tercih edilebilir gvenlik seviyesi sunmaktadr.

8.

Uygulamanz kullanacaklar, sadece dostlarnz deildir. Uygulamanzdan gelen ifadeleri dorudan SQL ifadenize ekleyip SQL ifadenizi altrmaktan kann. SQL
Server'e kaydedilmek zere kullancdan aldnz veriler iin gereinden uzun girdi
kabul etmeyen yaplar kullann. Tablo tasarmlarnda ve procedure, fonksiyon ve
deiken tanmlamalarnda alan uzunluklarn gereinden fazla uzun tutmayn. Kul-

Ek A: Veritaban Programclarna pular

665

lancdan gelen bilgilerde kt niyetli ifadeler olup olmadn kontrol etmek zere
bir yaklam gelitirin. Bu konuda, maruz kalabileceiniz saldrlar ve yaklamlar
hakkndaki geni bilgi, "SQL Enjeksiyonu Kar nlemleri" bal altnda ele alnmtr. Uygulama gelitirirken, bu trden saldrlar aklnzdan karmayn.
9.

Gvenlik ynnden gl bir uygulamann nasl gelitirildii hakknda e-week tarafndan


dzenlenen
yarmalar
ve
edinilen
tecrbeler
hakknda,
http://www.eweek.com adresinden "OpenHack" kelimesini aratarak bilgi alabilirsiniz.

10. Gncel saldr ve korunma yntemleri


www.sqlsecurity.com adresini takip edebilirsiniz.

hakknda

bilgi

almak

iin

SQL Enjeksiyonu ve Kar nlemler

Kullancdan gelen deerleri, dorudan SQL ifadesine dahil edip sorguyu altrmak, kt niyetli kullanclarn sisteme zarar vermesi iin bulunmaz frsattr. Basit bir parametrik
deer beklediimiz yerden, zararl bir SQL ifadesi gelebilir. Burada, bu trden yaklamlarn neler olduunu ve bu yaklamlara nasl kar koyabileceimizi ele alacaz.
Tektrnak Saldrlar

tblKullanici tablosunda yer alan kullaniciAd, yetkiSeviye ve sifre stunlarn kullanarak,


yetkilendirme yaptmz varsayalm. Bu stunlar iin, dardan gelen kullanc ad ve ifre deerlini alp, veritabanndakilerle eit olup olmadn karlatrdmz varsayyoruz.
yle bir SQL ifadesi kullanmamz gerekir:
SELECT kullaniciKod,kullaniciAd, yetkiSeviye
FROM tblKullanici
WHERE kullaniciAd='volkanverim@verivizyon.com' and sifre=0xffaa

Burada, 'volkanverim@verivizyon.com' ve 0xffaa deerleri kullanc tarafndan girilmesi


beklenen deerlerdir. Bizim sitemize gelen btn ziyaretiler, sadece siteye giri yapmay
dnmeyebilirler. rnein, kullaniciAd='volkan' OR 1=1 OR 1='' eklinde bir deer girilirse nasl bir ifade ortaya kar?
SELECT kullaniciKod,kullaniciAd, yetkiSeviye
FROM tblKullanici
WHERE kullaniciAd='volkan' OR 1=1 OR 1='' and sifre=0xffaa

Bu sorgu, ifre ve kullanc ad doru olsun veya olmasn her zaman kullanc ad, ifre ve
yetki seviyesi bilgilerinden ilk kayda ait olanlar kullanarak yetkilendirme yapacaktr.
nk, OR 1=1 her zaman dorudur ve dier btn artlar yanl olsa bile, tm kaytlar
semek iin yeterlidir (bkz. rnek 6.11)
Bu durumda, ansmz varsa, en bata yer alan kullancmzn, sitedeki haklarnn kstl
olmas hali ortaya kar ve sadece bir kii zarar grr.
zm olarak, tektrnak(') geen ifadeleri temizlemek ilk akla gelen yntemdir. Ancak
bunun tam olarak yeterli olmadn, sadece balang seviyesindeki saldrlar kesebileceini ilerleyen ksmlarda ele alacaz.

666

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Tek trnaklarn temizlendiini varsayalm. Bunun iin, basit bir fonksiyon VBScript ile u
ekilde yazlabilir:
Function saldiriOnle(sSQL)
sSQL=replace(sSQL,"'","''")
' tek trnaklar kabul etme
sSQL=replace(sSQL,"--","")
' aklama satrlarn kaldrarak
' saldrlar engelleyelim
sSQL=replace(sSQL,";","")
' ; ifadelerini kaldralm.
End function
Tablo A.3:
baz ASCII kodlar
ve sembol karlklar

ASCII Kod

Deer

32

boluk

39

'

45

49

61

79

82

Bu durumda, kt niyetli kii yle bir ifade girebilir: kullaniciAd='CHAR(49)


+CHR(39)+CHR(32)+CHR(39)+CHR(79)+CHR(82)+CHR(32)+CHR(49)+CH
R(61)+CHR(49)+ CHR(45)+CHR(45)'
ekil A.16:
Yukardaki ifadenin neticesini grmek isterseniz, resimdeki ifadeyi altrabilirsiniz (1'
OR 1=1-- ifadesi
elde edilmitir.)

Bu durumda, yukardaki saldr nleyici fonksiyonda baz dzeltmeler yaplarak kurtulmak mmkndr. rnein, + iaretini kullancdan kabul etmeyebilirsiniz. Ya da CHR
deerini bolukla filtreletebilirsiniz vb. gibi.
Hata Verdirmeye Dayal Saldrlar

Bir saysal stun varsa, hata verdirmek olduka kolaydr. SQL enjeksiyonunda en nemli
saldr yntemlerinden biri de sisteme hata verdirmektir. Hata mesajlar, genellikle tablo
ad, stun ad, prosedr ad, parametre ad ve tipi hakknda fikir edinilmesine yardmc
olur. te yandan, UNION ve HAVING gibi cmleciklerle, saysal ve metin veriler bir
stunda ele aldrlmaya alldnda hata mesajlar sayesinde, tabloda yer alan verilere
de erimek mmkn olur. Bu nedenle, hata mesajlarnz mmknse kullanclardan gizlemeniz nerilir. Bu saldrgan durduramasa da yavalatacak bir yntemdir.
Ancak hata mesajlarn gizlemek saldrlara kar %100 gvenli bir yol deildir. nk
WAITFOR deyimi, SQL Server'in sorguyu altrmadan nce, belli bir sre susmasn sa-

Ek A: Veritaban Programclarna pular

667

layan bir operatr olduundan, saldrgan denemelerini dorulatmak zere belli bir sre
SQL Server'i bekletme yntemini tercih edebilmektedir. SQL Server ayet beklerse, Web
Server da ondan gelen yant bekleyecei iin ge yant verecektir. Bu ipucunu deerlendirerek, saldrgan WAITFOR ile AND'ledii ifadenin doru olup olmadn anlayabilir.
Burada, ok zararl olmayan ama bu durum geerli ise, saldrgann azn sulandracak bir
teknik ile rnek verelim: Saldrgan, bizim sitemizde kullandmz uygulama hesabnn sa
ile balanp balanmadn merak ediyor olsun:
IF SUSER_SNAME()='sa' WAITFOR DELAY '0:0:7'

Bu ifade, hibir sonu dndrmez. Sadece verilen eitlik doru ise, SQL Server 7 saniye
bekler. Bu ifade bir batch'in ierisinde ise (ki Enjeksiyon bu demek), btn batch tamamlanana kadar, SQL Server Web Server'e veri yollamaz.
ayet uygulama, webuser gibi bir kullanc ile balandrlmyor da sa ile balanyorsa,
Web borwser sayfay normalden 7 saniye daha ge ykleyecektir. Aksi halde hibir sre
fark olumayacaktr.
Dikkat: Yeterli zaman olan bir saldrgan, WAITFOR DELAY ... ile birok bilgiyi sisteme teyid ettirebilir.
Stored Procedure Kullanan Saldrlar

Stored Procedure kullanlmas, tek banda SQL Enjeksiyonundan korunmak iin yeterli
deildir. zellikle, ierisinde EXEC deyimini kullanarak statik olarak SQL ifadeleri altran stored procedure'ler, sistemin gvenlii asndan ciddi tehlikeler dourabilir. nk bu trden bir stored procedure de sql enjeksiyonuna maruz kalabilir.
rnein, bu trden basit bir sistem stored procedure'ne gzatalm. Bu procedure normal ayarlarda public rol iin eriilebilirdir.
CREATE PROCEDURE sp_MSdropretry (@tname sysname, @pname sysname)
as
declare @retcode int
/*
** To public
*/
exec ('drop table ' + @tname)
if @@ERROR <> 0 return(1)
exec ('drop procedure ' + @pname)
if @@ERROR <> 0 return(1)
return (0)

Bu procedure'e eriim hakk elde eden saldrgan, kt niyetleri iin kullanabilir.


Dikkat: Bu derece tehlikeli bir sistem stored procedure' olan sp_MSdropretry default ayarlarda,
public rol iin eriilebilirdir.

668

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Stored procedure'ler bir gvenlik unsuru olarak kullanlyorsa, mutlaka API'lerin ilgili nesne
ya da fonksiyonlar kullanlarak parametre aktarm yaplmaldr. Dorudan Transact-SQL
ifadesi olarak arlan stored procedure'ler de sistem gvenlii asndan tehlikelidir.
Bu konuya zm olarak nasl yaklalaca, ADO ve ADO.NET ile stored procedure
altrma bahsinde ele alnmtr.
Genel SQL Enjeksiyon'larndan Korunma Tedbirleri

SQL Enjeksiyonundan korunmak iin kabul grm, temel yaklam vardr. Sizin iin
en uygun olanna kendiniz karar verebilirsiniz.
Sadece yileri Kabul Etmek

En yksek seviyede korunma iin bu yntemi tercih edebilirsiniz. Ancak, kullanclarnzla etkileiminizde eitli kstlamalar yansyacaktr.
Kullancnn sadece "abcdefghijklmnopqrstuwxvyz1234567890
@_/[]()" eklinde belli bir alfabe ile kstlayabilir, dndaki deerler kabul etmeyebilirsiniz. Baz bankalarmz gvenlikte bu yntemi tercih etmektedir.
Bu yntemi gereklemek iin, kullancdan gelen girdi ifadeyi bir string deikene atp,
her seferinde sadece bir tane karakter alarak, bu harfin yukardaki deerler arasnda yer
alp alnmadna baklr. Btn karakter bu alfabeden geliyorsa, kullanc girdisi zararsz
kabul edilir. Aksi halde, istek yantlanmadan sona erdirilebilir (ASP iin
Response.End()) veya baka bir kaynaa ynlendirilebilir (ASP iin
Response.Redirect()).
Ktleri Reddetmek

Bu yaklam da gvenli kabul edilebilir. Ancak baz durumlarda, kullanc hatasnn nedenini anlamayabilir.
erisinde, "SELECT", "INSERT", "UPDATE","DELETE","DROP","
","CHAR (" gibi ifadeler geen kullanc girdileri varsa kabul edilmeyebilir.

OR

Bu yntemi gereklemek iin, kt olduu varsaylan ifadeler bir diziye atldktan sonra,
bu dizideki her bir ifade iin kullanc girdisi kontrol edilebilir. erisinde bu ifade geen
bir kullanc girdisi olmas halinde, istek yantlanmadan sona erdirilebilir veya baka bir
kaynaa ynlendirilebilir.
Ktleri Filitreleyerek Kabul Etmek

En basit korunma yaklamdr.


Yukardaki ifadelerle birlikte, "--", ";", "'" gibi iaret ve ifadeleri (Replace
fonksiyonu gibi br fonksiyon yardmyla) filtreleme yaptktan sonra, btn girdileri kabul
etmek bir yaklam olarak kullanlabilir.
Burada anlatlanlar, bir ok seminerde bir ok kiiye aktarlm balang seviyesindeki
teknikler olup hemen her sistemin maruz kalabilecei cinstendir. Bir saldrgan, SQL
Server'i ele geirdikten sonra, stnde kurulu olduu bilgisayarn iletim sistemini, btn
a ele geirmesi iten bile deildir. Bu nedenle, SQL Server dtkten sonra saldrgann
daha fazla zarar vermesini engelleyecek nlemler almak akllca olur ki bunlar, kitabn
konusunu amaktadr.

EK B

C# VE OOP KILAVUZU
Bu ksm, T-SQL'i bir programlama dili olarak bilenler iin C# diline hzl bir balang maksatl eklenmitir. nitenin sonlarna doru nesneye dayal programlamann genel bir zetini ve takip eden sayfalarda da 3N katman mimarisi iin rnek bir uygulama bulabilirsiniz.

C# LE PROGRAMLAMAYA GR KILAVUZU
Bu blm, daha nceden herhangi bir dilde (ki buraya kadar okudunuzsa en azndan TSQL diye bir dili kullanmay biliyor olmalsnz) kodlar yazm ama C# ile henz tanmam programclar iin hzl bir balang klavuzu olarak hazrlanmtr.
Bu blm C# dili gibi geni bir kavramn sadece kitap ieriindeki program paracklarn kodlayabilecek kadarn kapsamaktadr. Kitap ierii C#' sadece ynetilmi olarak
(.NET Framework dahilinde) ele almaktadr.
C# ile drt farkl alabilir program yazlabilir: Komut satr uygulamas, ASP.NET uygulamas Windows Formlar Uygulamas. ve WPF uygulamalar Bunun dnda, C# ile
.Net platformu iin kendiliinden alamayacak ama bir baka program tarafndan yklenebilecek programlar (dll uzantl assembly'ler) kodlamak mmkndr. SQL Server
ierisindeki CLR bileeni bu trden kodlar altrabilen ortamlardan biridir.
C# ile Merhaba Dnya
CLR ortam, C# dili ile de programlanabilen bir ynetilmi (managed) ortamdr.
Managed ortam, sistem kaynaklarn programc yerine kontrol eden ortam demektir.
.NET CLR ortamn kullanarak alacak en basit komut satr C# program aadaki
ekilde kodlanabilir:
using System;
public class MerhabaCSharp{
public static void Main(){
Console.WriteLine("Merhaba C#");
}
}

lk rnei yazp derleyip altrabilmek, bir dili renmenin yarsdr denir. lk C# rneinizi test etmek iin, Visual Studio.NET ile bir komut satr uygulamas balatabileceiniz gibi, .NET Framework SDK kurulumuyla birlikte gelen csc.exe C# derleyicisini kullanabilirsiniz.

670

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

ekil B.1:
MerhabaCsharp
projesinin balatlmas

ekil B.2:
lk C# programnn altrlmas.

Bir dili gl klan noktalardan biri de kendisi ile birlikte gelen hazr ktphanenin geniliidir. nk bu ktphane sayesinde programc daha az kod yazarak daha fazla i
kartabilir. Bu ekilde bir dil ile gelen hazr ktphaneye temel ktphane (base library)
denir. C#, .NET Framework ile gelen C# ktphanesini temel ktphane olarak kullanr.
Bir dil ile programlar gelitirirken, dil ierisinde yer alan snflarn hiyerarik olarak dzenlenmesi gerekebilir. Bu tr durumlar iin C# isim uzay (namespace) deyimini destekler. Mesela System.Data isim uzay ierisinde veri ynetimi ile ilgili snflar yer alr.
Bir sistem ktphanesini, sadece kod yazarken kendi programmzn parasym gibi kullanabilmek iin, using deyimi ile ihtiya duyduumuz ktphaneyi ieren isim uzayna
atfta bulunmak yeterlidir.
C# nesneye dayal bir dildir. Bu nedenle, C# ierisinde yazlan btn programlarn bir
tr ierisinde bulunmas zorunluluktur. Bizim rneimizde bu nedenle MerhabaCSharp
snf yer almakta.
Snflar Yazmak
Bir snfn dardan bakldnda iki temel trden eleman olabilir: alan ve metot. Alan,
bir deer atanabilen ve deeri okunabilen snf bileenidir. Snf ierisinde fonksiyonellikleri yerine getirecek bileene de metot denir. Nesneye dayal programlamada metot, bir
snf ierisinde yazlm stored procedure'ler gibi dnlebilir.
zellikler iin rnek vermek gerekirse, bir nesnenin Boy, En, Renk gibi parametrik deerler alacak bileenleridir.

Ek B: C# ve OOP Klavuzu

671

Metodlar bir ilevi yerine getirirler. Yazdr, Topla, arp, kart, Birlestir gibi
C#'da bir programn altrlabilir olmas iin bir snfnn Main() adl metodu olmas
gerekir. Yukardaki rnekte bu trden bir metot yer almaktadr.
rnek 1:
En basit olarak marka bilgilerini saklayacak bir Class u ekilde tanmlanabilir:
//Marka.cs
public class Marka{
public int markaKod;
public string markaAd;
public MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
markaKod, markaAd);
}
}

rneimizde, markaKod ve markaAd birer zellik iken MarkaBilgileriniYaz() bir


metoddur.
Yazm olduunuz snflar Int gibi yeni bir trdr. Bu trlerde deikenler tanmlayabilirsiniz. Herhangi bir snf trnden tanmlanan deikene nesne denir.
pucu: C#'da aklama tek satr eklemek iin // ve ok satr aklama eklemek in /*..*/ iaretlerini
kullanabilirsiniz. Bloklar tanmlamak iin {} eklinde alr kapanr kvrcklar kullanlr.
rnek 2:
altrabildiimiz ilk nesne ieren rneimizi u ekilde deitirelim:
using System;
public class MerhabaCSharp{
public static void Main()
{
Marka yeniMarka = new Marka();
yeniMarka.markaKod=500;
yeniMarka.markaAd="Verivizyon";
yeniMarka.MarkaBilgileriniYaz();
}
}
public class Marka{
public int markaKod;
public string markaAd;
public void MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
markaKod,
markaAd);
}
}

672

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

rneimizde, Marka snfnn zelliklerinin ve metodunun kullanlmasn grebilirsiniz.


ekil B.3:
Marka snfnn
kullanlmas

Deikenler Deerler ve Veri Tipleri

Snflarda zellik tanmlarken ve kod yazarken, deikenler kullanlr. Deikenlerin ne amala


kullandln T-SQL ile Programlamak adl blmde renmitik; kendilerine aktarlan deeri
tutup kendi ad ile bu deere eriim tanmlamak. Deikenin ad deimez ama deerine her
zaman atama yaplabilir. T-SQL'de olduu gibi, C# iin de deikenlerin tipi vardr.
C#'ta veri tipleri iki farkl grupta ele alnr: Deer tipler ve Referans tipler.
Deer tiplerin deerleri de kendileri ile birlikte Stack denilen blgede tutulur. Bu blge
hzl eriim salar ancak, bu blgede saklanacak bir tipin ne kadar alan gerektirdiini tam
olarak bilmek gerekir.
Tablo B.1:
C#'da yer alan
deer tipleri

Deiken Tr

Aklama

sbyte

8-bit iaretli tam say

short

16-bit iaretli tam say

int

32-bit iaretli tam say

long

64-bit iaretli tam say

byte

8-bit iaretsiz tam say

ushort

16-bit iaretsiz tam say

uint

32- bit iaretsiz tam say

ulong

64-bit iaretsiz tam say

float

Tek duyarlkl kayan noktal say (yaklak deer ondalk)

double

ift duyarlkl kayan noktal say (daha byk yaklak deer ondalk)

char

2-bytelk Unicode temelli tek harf saklayabilen deiken

decimal

28 basamak duyarlkl kesin deer kaydedebilen ondalk say.

bool

true veya false deeri alabilir.

Deer tipli bir deikene dorudan deer atamas yaplabilir.


rnek 3:
a deikenine a=0 deeri atanabilir.
int a;
a=0;

Ek B: C# ve OOP Klavuzu

673

Dikkat: C#'da bir deiken, ilk olarak deer atanmadan, baka bir ilemde kullanlamaz, sadece tanmlanabilir.
Referans tipler, snf gibi boyutu her atamada farkl deerler alabilecek tipler iin idealdir. Referans tiplere dorudan atama yaplamaz. nk referans tipler, deerlerini Heap
denilen zel bir blgede tutarak o blgedeki deere referans ierirler. new operatr,
heap blgesinden yeni bir adres tahsis ederek bu blgenin adresini, atfta bulunulan deikenin deeri ile eletirir.
ekil B.4:
CLR ortamnda bir
deer tip deiken
stack blgesinde
tutulurken, referans tip deikenin sadece kendisi
stack blgesinde
tutulur. Deeri
Heap blgesinde
tutulur ve deiken buraya bir
refarans ierir.

rnek 4:
yeniMarka adnda bir deikenin stack blgesinde tanmlanmas ve heap blgesinden
yeni bir adres alnmas.
int x, y;
int z=0;
Marka yeniMarka ;
// marka trnde bir deikeni stack blgesine at
yeniMarka = new Marka();
// heap blgesinden bir adresi bu deikene tahsis et.
ekil B.5:
Stack ve Heap
blgelerindeki
deiken ve
deerlerin davranlar

Stack blgesindeki deikenlere dorudan null deeri atanabilir veya saha dna kldnda bu deikenler silinebilir. Bu tr durumlarda, Heap blgesindeki ayrlm alan ksz kalacaktr. Heap blgesindeki ksz alanlar, hafza limitleri zorlanmaya balandnda
Garbage Collector ad verilen zel .NET Framework bileeni tarafndan otomatik olarak
temizlenirler. Temizlenme esnasnda nesnelerin Finalize() metodlar altrlr.

674

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

pucu: String tipi, C#'ta referans tipli olmasna ramen, deer tipli gibi davranr. Bunun arka planda
yansmas olarak sk deien string tipteki veriler fazla hafza tketirler. Bu nedenle, fazla deien
string deikenler yerine System.Text snf ierisinde yer alan StringBuilder snfn kullanabilirsiniz.
String tiplerin balang ve bitileri "" ile belirtilir. Ancak string ifadenin kendi ierisinde
de bir " geerse, bu derleyicinin sentaks anlamasn imkansz klar. Bu nedenle baz durumlar u durumlar olarak ele almak gerekir. Bu trden karakterler ve ilevlerini aadaki tabloda bulabilirsiniz.
Tablo B.2:
U (escape)
karakter ve karlklar.

U Karakter

Karl

\'

Tek trnak

\"

ift Trnak

\\

Ters bl

\0

Null

\a

Alert (bip sesi)

\b

Backspace

\f

form besleme

\n

Alt satr

Satr ba

Yatay tab (3 karkater boluk)

Dey tab (3 satr alta geme)

U karakterleri dorudan bir string ifade ierisinde vermek istiyorsanz string ifadenin
bana@ iareti koymak gerekir.
rnek 5:
string ucKarakterler = @"\, ' ve \t gibi karakterler
her zaman bir metin
iinde gemeyebilir"
Tr Dnmleri

C# asndan tr dnmlerini iki ana balk altnda ele alabiliriz: Bilinsiz Tr Dnm ve Bilinli Tr Dnmleri.
Bilinsiz tr dnm, dorudan bir atama ilemi ile dnmn yaplabilmesidir.
rnek 6:
Bilinsiz dnm, sadece uygun tiplerden byk olan kk olana atandnda yaplabilir.

Ek B: C# ve OOP Klavuzu

675

int i =0;
sbyte j=1;
i=j; // j sbyte deeri bir int trden deikene atand iin
kendiliinden dnt.

Bu trden dnm byk trn kk tre atanmas halinde problem kartacaktr.


Uyumlu tipleri birbirine dorudan tr belirterek de dntrmek mmkndr:
rnek 7:
int i =5000;
sbyte j=1;
j=(sbyte)i;
// i nce sbyte trne dntrld. Arkasndan j sbyte tipli
deikene aktarld.

Ancak bu trden dnmler yaparken, veri kaybna zellikle dikkat etmek gerekir.
C#'da uyumsuz trleri birbirine dntrmek iin Convert snfn kullanabilirsiniz.
Convert snfnn hemen her tr bir dier tre dntrecek uygun metodlar vardr.
rnek 8:
String trden, say ieren bir deeri Int trne dntrebiliriz.
string sYas="23";
int iYas;
iYas = Convert.ToInt32(sYas);
// veya Int32.Parse(sYas) da edeer bir yntemdir.
Deer ve Referans Tipler Aras Dnm: Boxing ve Unboxing

Bazen, adres temelli bir deikeni deer tipli gibi veya tam tersi deer tipli bir deikeni
adres temelli gibi kullanmak gerekebilir. Mesela bir metot, dardan nesne bekliyordur
ama elimizdeki deer int (Stack deiken)dir veya bir nesne int bekliyordur ama elimizdeki int deeri bir nesnede tutuluyordur.
Deer tipli bir deikenin adres tipe (Object) evrilmesine Boxing denir.
rnek 9:
int x=3;
object o = x; // artk 3 deeri heap'te tutulmuyor

Adres temelli deer tayan bir deikeni, deer trne dndrmeye de Unboxing denir.
rnek 10:
int y= (int) o;
Dngler ve Karar Yaplar

T-SQL'de grdmz dng ve karar yaplarnn ok daha gelimileri C# dilinde de


vardr. Kitap ierisindeki rnekleri anlayabilmeniz iin, sadece if-else, for ve while yaplarnn kullanmn bilmeniz yeterli olacaktr.

676

Yazlmclar in SQL Server 2008 ve Veritaban Programlama


if-else Karar Yaps

Belli artlarda alacak program paracklar oluturmak iin u ekilde kullanabilirsiniz.


int x=20
if (x == 20)
{
Console.WriteLine("x == 20 imi");
}
else
{
Console.WriteLine("x != 20 imi");
}
for Dng Yaps

Baz ifadelerin n kere almas gerekiyorsa for yaps kullanlr.


rnek 11:
Ekrana 1-20 arasndaki saylar yazdracak ekilde bir C# program u ekilde yazlabilir:
for (int i = 0; i < 20; i++)
{
System.Console.WriteLine (i);
}
while Yaps

Bazen, belli artlarn hsl olmas iin ka dng atlaca belli olmayan ifadeler olabilir.
Bu tr ifadeleri while yaps ile artlar oluuncaya kadar tekrarlatabiliriz.
int x = 99;
while (x > 36)
{
System.Console.WriteLine(
"Henz x deeri 36dan byk.. ");
x--;
}

pucu: Dngleri bir defaya mahsus yarda kesmek iin continue ve geri kalan tm dngleri brakp
dngy kesmek iin break ifadelerini kullanabilirsiniz.
Nesnelerle almak
Yazm olduunuz snflar Int gibi yeni bir trdr. Bu trlerde deikenler tanmlayabilirsiniz. Herhangi bir snf trnden tanmlanan deikene nesne denir. Programlamada
Nesnel Yaklam, gnlk hayatta etrafmzdaki aralar kullanmaya bak amz yanstmak zere gelitirilmitir.

Gnlk hayatta, belli ama iin kullandmz her ey nesnedir.

Ek B: C# ve OOP Klavuzu

677

Program gelitirirken, aslnda gerek dnyadan problemleri modelleriz.

Nesne, "kapal bir kutudur". Belli bir ilevi yerine getirmek iin tasarlanmtr. Nesneyi
kullanabilmek iin girdiler veririz. Nesne ileyii, bizim deil tasarlayanlarn bilgisi dahilindedir. Biz i ieyiini bilmeden ne verdiimizde ne alacamz bilerek kullanrz. Yani
nesne, bilmediimiz ilemler yapar ve bize bir kt verir.
Snflarda Eriim Seviyelerini Anlamak

Nesneler snflar halinde programlanrlar. Yani nesnelerin tanmlar, snflarda sakldr.


Ya da tersten bakacak olursak, bir snftan nsha kartldnda bunun ad nesne olur.

Bir "kapal kutunun" i ileyiini problemsiz olarak yerine getirebilmesi, d dnyadan soyutlanm olmasna baldr.

Mesela bir cep telefonunu dnn. Kablolarna eriip ksa devreler yaptrarak da pekl
bir eyler yaptrabilirsiniz. Ama retici firmas, bu 'kapal kutu' yani telefon'un ilevini istikrarl olarak yerine getirebilmesi iin, bir ok i ileyiini bir klfn arkasnda saklam
ve bize sadece tutarl, amaca uygun kullanm girdilerinde bulunabileceimiz tular tasarlayp bu tulara erimemize olanak salamtr.
te programlama dnyasndaki nesneler de kullanlmadan nce tanmlanrlar. Yani snf
halinde kodlanrlar. Snf halinde kodlama aamasnda, hangi metotlarn, hangi zelliklerin dardan eriilebilir olaca, hangi elemanlarn sadece i ileyile ilgili olduundan d
dnyadan eriilemez ve bilinemez olmas gerektiine karar veririz. Bu trden karar verme
ilemini belirleyebileceimiz anahtar kelimeleri ve ilevlerini aadaki tabloda bulabilirsiniz.
Tablo B.3:
nesnelerin elemanlarna eriimi
belirleyen kelimelerden sk kullanlanlar.

Eriim Belirleyici

Kullanm Yeri

levi

public

Snf, zellik, metot

Dardan eriilebilir bir eleman belirlemede


kullanlr

private

Snf, zellik, metot

Elemann sadece nesnenin i ileyii iin gereksinim duyulduunu, dardan eriilmemsi


gerektiini anlatr

rnek 12:
Daha nceki rneklerde u ekilde kodladmz marka snfnda, markaKod ve markaAd
alanlarna dorudan eriimi kapatalm:
public class Marka{
private int markaKod;
private string markaAd;
private void MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
markaKod,
markaAd);
}
}

678

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Artk u ifade dzgn olarak alamayacaktr:


using System;
public class MerhabaCSharp{
public static void Main()
{
Marka yeniMarka = new Marka();
yeniMarka.markaKod=500;
yeniMarka.markaAd="Verivizyon";
yeniMarka.MarkaBilgileriniYaz();
}
}
ekil B.6:
Eriim seviyeleri,
snf darsndan,
snf elemanlarna
eriimleri belirler.

nk markaKod ve markaAd stunlarna dorudan eriim kapatlmtr.


Bu snfn ilgili alanlarna kontroll bir eriim salamak iin, property ad verilen yar
metod-yar deiken yaplar kullanabiliriz.
rnek 13:
Nesne deikenlerine eriimlerini dzenlemek zere property'leri kullanabilirsiniz.
public class Marka{
private int markaKod;
private string markaAd;
public int MarkaKod
{
get { return markaKod; }
set
{
if (value > 0)
markaKod = value;
}
}
public string MarkaAd
{
get { return markaAd; }
set { markaAd = value; }
}
public void MarkaBilgileriniYaz()
{
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
MarkaKod,MarkaAd);
}
}

Ek B: C# ve OOP Klavuzu

679

Dikkat edilirse, artk markaKod ve markaAd stunlarna atanan deerler belli bir kontrole tabi tutulabilecek durumdadr. (mesela markaKod deerinin sfrdan kk olmamas gerektii kontrol edilmekte)
ekil B.7:
Marka Snf

Bu tr bir snf u ekilde nesneletirip kullanlabilir:


using System;
public class MerhabaCSharp
{
public static void Main()
{
Marka verivizyon = new Marka();
verivizyon.MarkaKod = 500;
verivizyon.MarkaAd = "Verivizyon";
verivizyon.MarkaBilgileriniYaz();
Marka seckin = new Marka();
// kurala uymayan bir atamay,
// nesne kabul etmeyecektir
seckin.MarkaKod = -1;
seckin.MarkaAd = "Sekin Yayn A..";
seckin.MarkaBilgileriniYaz();
}
}
ekil B.8:
Programn kts

ekil B.9:
Snflardan nesne
tretilmesi

Yapc (Constructor) Kavramn Anlamak

Bir snftan nesne nshalandrlmas aamasnda, snfa ait bir metodun devreye girmesi
gerekir. Bu metod,

Snf ile ayn ad tar.

680

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Dnen deer almaz.

Genel olarak public'tir.

En genel manada, bir nesnenin hazrlanmas (initialisation) maksadyla kullanlr

rnek 14:
Yeni bir marka oluturulurken, bu markaya ait balang verilerinin otomatik olarak atanabilir olmasn istersek,
public class Marka
{
private int markaKod;
private string markaAd;
public Marka(int markaKod, string markaAd)
{
MarkaKod = markaKod;
MarkaAd = markaAd;
}
public int MarkaKod
{
get { return markaKod; }
set
{
if (value > 0)
markaKod = value;
}
}
public string MarkaAd
{
get { return markaAd; }
set { markaAd = value; }
}
public void MarkaBilgileriniYaz()
{
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
MarkaKod,
MarkaAd);
}
}

Bu trden bir snf kolayca u ekilde kullanabiliriz:


using System;
public class MerhabaCSharp{
public static void Main()
{
Marka verivizyon = new Marka(500,"Verivizyon");
verivizyon.MarkaBilgileriniYaz();
Marka seckin = new Marka(501,"Sekin Yayn A.");
seckin.MarkaBilgileriniYaz();
}
}

Ek B: C# ve OOP Klavuzu

681

ekil B.10:
Programn almas

Herhangi bir anda, snftaki elemanlarn 'o' anda stnde allrkenki hali ile nesne iin
nshalanm kopyalarn kastetmek zere this anahtar szcn kullanabilirsiniz.
rnek 15:
Marka snfnn, MarkaBilgileriniAl adnda aadaki gibi bir metodu olsun:
public void MarkaBilgileriniAl(int MarkaKod, int MarkaAd)
{
this.MarkaKod=MarkaKod;
this.MarkaAd=MarkaAd;
}

Metodlar Ar Yklemek

T-SQL ile Stored Procedure'ler gibi prosedrel rutinler kodlarken, istee bal parametreler iin default deerler verebiliyorduk. C# bu trden bir seenek sunmaz. Bunun yerine ayn adda farkl sayda veya tipte parametreler alan metodlar tanmlayabiliriz. Bu ileme Metot Ar Ykleme (Method Overloading) denir.

Ayn adda ama farkl imzada iki method ar yklenmitir denir.

Bir durum iin method ad arldnda, parametre olarak verilen deer ve deikenlerin tip ve saysna gre uygun olan method otomatik olarak devreye girer.

Constructor metotlar da neticede bir metot olduundan ar yklenebilirler.


rnek 16:
Daha nceden, marka snfnn oluturulabilmesi iin bo bir yapc metot derleyici tarafndan otomatik olarak ekleniyordu. Ancak artk biz kendimiz bir yapc metot ekledik.
Halen Marka snfnn hibir zellii verilmeden de nesne tretiminde kullanlmas isteniyorsa, ikinci bir constructor metodu bo olarak bile olsa tanmlanabilir. Aksi halde derleyici tarafndan byle bir metod otomatik olarak oluturulamaz.
public class Marka{
private int markaKod;
private string markaAd;
public Marka(){
// bo yapc metot
}
public Marka(int markaKod, string markaAd)
{
MarkaKod=markaKod;
MarkaAd=markaAd;
}
public int MarkaKod{
get{return markaKod;}

682

Yazlmclar in SQL Server 2008 ve Veritaban Programlama


set
{
if (value > 0)
markaKod = value;
}
}
public string MarkaAd
{
get { return markaAd; }
set { markaAd = value; }
}
public void MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
MarkaKod,
MarkaAd);
}
}

Static Kavramn Anlamak

Mademki nesneleri, snflardan oaltarak kullanyoruz, bu durumda her nesne iin snfn ierisindeki her eyi kopyalatmaya gerek var mdr? Gereksiz eyleri hafzada gereksiz
yere oaltmasak da olur mu? Gibi sorular kendinize sormu olabilirsiniz. Nesneye dayal
programlama, her eyin illa da bir nesne stnden eriilebilir olmasn zorunlu klmaz.
Baz elemanlara snf stnden eriilebilir. Mesela, markalarn marka kodlarnn belli bir
deerin altnda kalmamas gerekiyor diyelim. Bu trden bir parametrenin her bir snf ile
oaltlmas yerine sadece snfn bir paras olarak kalmas daha akllca olacaktr.
rnek 17:
Marka snfna, minimum marka kodunu iaretlemek zere static bir alan ekleyelim.
public class Marka
{
public static int minimumMarkaKod = 0;
private int markaKod;
private string markaAd;
public Marka(){
// bo yapc metot
}
public Marka(int markaKod, string markaAd)
{
MarkaKod=markaKod;
MarkaAd=markaAd;
}
public int MarkaKod{
get{return markaKod;}
set
{
if (value > 0)
markaKod = value;
}
}

Ek B: C# ve OOP Klavuzu

683

public string MarkaAd


{
get { return markaAd; }
set { markaAd = value; }
}
public void MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
MarkaKod,
MarkaAd);
}
}

rneimizde sadece bir deikeni static olarak tanmlandk. Bir metodu, bir zellii de
static olarak tanmlamak mmkndr. Ancak unutulmamas gereken nokta, statik tanmlanan elemanlara nesne stnden ulalamaz, dorudan snf stnden ulalabilir.
using System;
public class MerhabaCSharp{
public static void Main()
{
Marka verivizyon = new Marka();
verivizyon.MarkaKod=500;
verivizyon.MarkaAd="Verivizyon";
verivizyon.MarkaBilgileriniYaz();
Marka seckin = new Marka();
// kurala uymayan bir atamay,
// nesne kabul etmeyecektir
seckin.MarkaKod = 501;
seckin.MarkaAd = "Sekin Yayn A..";
Console.WriteLine("bir marka kodu {0} deerinden byk olmaldr", Marka.minimumMarkaKod);
}
}
ekil B.11:
Static bir alana
snf stnden
eriilmesi.

ekil B.12:
Static snf elemanlar, nesnelerle birlikte oaltlmaz, snf stnden eriilebilir.

684

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Dikkat: Static yeler, nesneye eriemezler. Nesneler, statik yelere eriebilirler.


Elbette ne nesneye dayal programlama, ne de C# bu kadarlk bir bilgi ile tam olarak kullanlamaz ancak burada verilenler, size sadece kitap ieriini anlayabilecek seviyeye getirme amaldr.
zetle Nesneye Dayal Programlama

Nesne ynelimli programlamann temelini Class'lar oluturur. Bir class, gnlk anlamda
bildiimiz nesne'nin kodlanarak tanmlamasdr. Nesnelerle alma teorisinin temelinde,
ieriinin nasl altn bilmeden onu kullanabilme mant yatar. Araba, DVD Player
gibi... nasl yaptklarn bilmeyiz ama ne yaptklarn biliriz.
1.

Bir class genel olarak u yapdan ibarettir (rnek iin blmn ilerleyen ksmnda
yer alan snflara bakabilirsiniz. )

Method'lar, property'ler veya deikenler (field) ierebilir (bunlarn her birine


member denir)

Method, prosedrel programlamada bildiimiz fonksiyon'un ilevini class'larda yerine getirir.

Property prosedrel programlamada bildiimiz deiken'in ilevini class'larda yerine


getirir. Bu ilev iin, deiken de kullanlabilir.

Property'ler yazlabilir ve okunabilir olabilir. Sadece okunabilir veya sadece yazlabilir tanlanmas mmkndr. Ancak deikenleri okunabilir yapmak iin, Method'lar
yerine, property (zellik) ad verilen yar method yar deiken yap kullanlabilir.

Method'lar ve deikenler, sadece snf ierisinden eriilebilir veya btn snflardan


yahutta btn assemly'lerden eriilebilir olabilir veya eriilemez olarak kodlanabilir.
Bunlar iin, Public, Private, Internal, External... gibi deyimler (Eriim Tanmlayclar) kullanlr.

Methodlar, ay adda ama farkl girdi veya kt parametrede st ste


tanmlanabililir. (method overloading) Bu durumda, class'n kullanm aamasnda,
arl ekline en uygun method otomatik olarak alglanr ve devreye girer.

2.

Class'lar yazldktan sonra, ktphanelerde saklanrlar. MFC, .NET gibi belli bir gelitirme ortam ile birlikte gelen ktphanelere, temel ktphane (base library-base
class) denir. Bu ve kullanc tarafndan gelitirilmi ktphaneler, isim uzay
(namespace) denilen nokta notasyonlu yaplarla dzenlenir. Namespace kavram,
fiziksel deil mantksal bir kavramdr. Yani, farkl dokmanlarda birbiri ile ayn seviyede class'lar olabilir.

Dzenlenmi Class'lara eriim, isim uzayndan sonra snf ad gelecek ekilde bir
notasyon ile salanr. (System.Data gibi)

C# gibi dillerde, ktphane snflarn, uygulamann ierisindeymi gibi dorudan


nesne adyla armak mmkndr. Ancak bunun iin uygulamann en banda,
isim uzaylar ve alt isim uzaylar nokta notasyonu ile snf adna kadar veya belli bir
seviyeye kadar belirtilebilir. Geri kalanlar, (snf ad veya isim uzaynn tamam be-

Ek B: C# ve OOP Klavuzu

685

lirtilmedi ise, belirtilmeyen ksm) kod ierisinde belirtilerek, snflara eriilebilir.


(using System.Data gibi)
3.

Class'lar yeni class'lar tretilirken u ekilde kullanlarak kolaylklar salarlar:

Yeni bir class'n ekirdeini oluturabilirler. (Implementation Inheritance) ve

Baz class'lar miras almaya kar korumaya alnabilir (Sealed Class)

Baz class'lar miras alnmadan kullanlamaz tanmlanabilir (Abstract Class)

Baz class'lar, miras alndktan sonra, methodlarn geersiz klacak ayn adda yeni
bir metod tanmlanabilir (method overriding)

Kendisinden treyecek class'larn yaplar hakknda sz sahibi olabilirler (Interface


Inheritance)

4.

Class'lar Bir Uygulama gelitirirken, u ekilde kolaylklar salarlar:

Baz class elemanlar, static deyimi ile tanmlanmamlardr ve nshalandrma


(instantiating) ile yeni class nshas kartlarak, kullanlrlar. ASP biliyorsanz veya
yukardaki ASP'li rnee bakarsanz, ADODB.Connection' dnn. Hep
nshalandrarak kullanlr.

Baz methodlar ve propertiy'ler, deikenler oaltlamaz olabilir (static) Bu tr


method'lar kullanlrken, class'lar nshalandrmakszn, orijinal namespace ve snfn
ad ile kullanlrlar. Yukardaki rnekte, Response.Write'i hatrlayn... hep ayn isim
ile kullandk. Aadaki rnekte, gvenlik ilemleri iin gelitireceimiz, MD5 ile
zet alan Class da bu trdendir.

Class'lar, ebebeynleri ile ayn trdenmi gibi davranabilirler. Bylece, temelde ayn
class'tan tretildikleri halde farkl trlerde olup ayn trm gibi davranan class'lar
elde edilebilir. (Polimorfizm)

3n Katmanl Mimari ve Snflarn Rol


-n Katman Mimarisi, zellikle nesneye dayal programlama ile birlikte g bulmu, veritaban programlamann esas dinamiklerini oluturan bir programlama eilimi hatta
trendidir. Bu nedenle, tam manasyla bilinmesinde yarar vardr. Burada, Nesneye dayal
programlamada kullanlan teriminolojinin anlalr bir zetini yapmaya altm. Geni
bilgi iin, bu konuda bir kitap okumanzda yarar olabilir.
Katman Tasarlamak

katman mimarisinin en alt katmann, buraya kadar rendiimiz tekniklerle gelitirdiimiz, Veri katman oluturur. Veri katman ile temasta bulunan, uygulamann en alt
katmanna i katman denir ve prensip olarak class'lardan oluur. Class'lar, meseleye ok
iyi vakf kiiler tarafndan tasarlanabilirler.
Class'lar tasarlamak iin gelitirilmi standart yollar var. Bunlardan en genel olan UML
(Unified Modeling Language)'dir. Bu konuda yeni iseniz, nesneye dayal bir dil ile kodlama iinin temellerini kavradktan sonra UML ile de hair neir olmanz, yararl olacak-

686

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

tr. Arkasndan, genel olarak karlalan sorunlara yaklam tarzlar hakknda bilgi
edinmek iin Tasarm Desenleri (Design Pattern) renmeniz, bu yoldaki son nokta olacaktr. Tasarm Deseni, sadece nesneye dayal programlamaya uygulanmasa da, nesneye
dayal programlama iin, bir ok tasarm desenini bir ok nesneye dayal dilde bulmak
mmkndr (C++, Java, C#).
Btn bu detaylar, size brakp projemizin genel olarak, katmana dalmn inceleyelim:
Tablo B.4:
En st katman
olutururan sunum katmannn
grevi, i katman
ile kullancy etkiletirmektir. Sunum katman
dorudan veritabanna erimez!
Bu ilemler iin, i
katmannda gelitirilmi Class'lar
nshalandrarak
kullanabilir.

Katman

Sunum

levi

Kullanc ile etkileim, i katmannda kodlanm


Login.aspx, Login.aspx.cs
nesneleri nshalandrp kullanmak.
Sunum ve Veritaban katmanlar ile etkileim.

kurallarnn salanmas

Veri

Projemizde Yer Alacak


Dosya- Bileen Adlar

KullaniciVT.cs
Guvenlik.cs

Tablolar, Trigger'lar, Stored Procedure'ler,


tblKullanici,
Constraintler ve dier veritaban bileenleri ile
SP$yetkilendir
kurgulanm veri mantnn salanmas

Buraya kadar rendiklerimiz erevesinde bir katman mimari yaklam ile, daha nce, ASP-ADO ile gereklediimiz rneimizi yeniden ele alalm:
Veri katmann biliyoruz. tblKullanici adnda bir tablomuz var. Bu tabloya eriip verilerin
doruluunu onaylayan, SP$yetkilendir adnda stored procedure kodladk, bu
nedenle. katman ile alrken, bilmemiz gereken ey, SP$yetkilendir'dir. teki ksmlar artk veri katmannda kalmtr. Neticede, veri katman ile ilgili ilemleri bitirdiimizi varsayabiliriz.
Katmann Tasarlamak

Bir sonraki katman olan i katmann tasarlamaya geelim. Bu i iin, nesneye dayal
programlamaya tam destek salayan, Managed C# dilini kullanacaz. Managed ve
Unmanaged kavramlar kafanz kartrabilir. Aralarnda ufak bir fark vardr: Managed
ortamda, sistemden hafza gibi kaynak alma ve sisteme bu kayna, ii bittiinde iade etme iini, altrma ortam yerine getirir. JVM ve .NET Framework bu trden ortamlardr. Ama ortam, her zaman byle olmayabilir. ayet iletim sistemi ile kaynak alveriini programcnn kendisi yrtyorsa, (ki bu durumda programcya ok fazla i der
ve sistemde daha fazla hata ihtimali vardr!) bu trden altrma ortamna da
Unmanaged ortam denir.
C# bir dil olarak her iki ortam da destekler. Ancak .NET ortam, C#'n btn meziyetlerini gsterebilecei bir ortam deildir. Buna ramen, biz .NET ortamnda alacaz.
Veritabanna eriip kullanc ile ilgili ilemleri yerine getirecek bir snfa ihtiyacmz var.
Bu snfa KullaniciVT adn verelim. Class adlarnn ilk harfi byk harfle balatlr. Bu

Ek B: C# ve OOP Klavuzu

687

bir zorunluluk deildir ama tre olmu bir kodlama tarzdr. imdi ilk snfmz kodlayalm:
Bu snfn amac, Web'den gelen verileri her seferinde zetlemek (Digest)tir. Bir yemiz
ilk kaydolduunda, setii ifresi veritabanmzda saklanmaz. Bunun yerine, zeti saklanr. Daha sonra, yetkilendirmek iin geldiinde de ifresinin zeti alnr. Bylelikle, her
seferinde gelen veririn daha nceki veri olup olmad bilinir, ama en nemli taraf, ne
olduu asla bilinemez. nk zet alma ile ifreleme yapan, SHA, MD5 gibi
algoritamalar, tek ynl veri dnmn esas alan, ters ynde bir dnme asla msaade etmeyen algoritmalardr.
///Guvenlik.cs
using System;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
namespace Verivizyon.Bilesenler
{
public class Guvenlik
{
public static string OzetCek(string gercekDuzMetin)
{
Byte[] gercekByteMetin = new
UnicodeEncoding().GetBytes(gercekDuzMetin);
Byte[] ozetByteMetin = ((HashAlgorithm)
CryptoConfig.CreateFromName("MD5")).ComputeHash(gercekByteMetin);
return BitConverter.ToString(ozetByteMetin);
}
}
}

pucu: C#'ta fonksiyon yoktur. Bunun yerine, class'larn method'larn kullanacaz. Ancak bir
methodu, gerek manada sabit bir fonksiyon gibi her yerde nshalandrmadan kullanmak istiyorsanz, static deyimi ile tanmlayabilirsiniz.
Takip eden snflar, aadaki gibi kodlayalm
///dosya:KullaniciVT.cs
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace Verivizyon
{
//KullaniciVT, kullanicilarla veritabani
// arasinda iliskiyi kuran,

688

Yazlmclar in SQL Server 2008 ve Veritaban Programlama


//is mantigi saglayicisidir.
public class KullaniciDetay
{
public string kullaniciAd;
/*Kullanicida bulunan ozellikler
*..
* */
}
public class YetkilendirmeBilgi
{
/*
* Yetkilendirilen kisiye ait, kullanici kodu, isim, soyad
* son giris tarihi gibi bilgileri encapsulate etmede
kullanilir.
* */
public string kullaniciKod;
public string isim;
public string sonGirisTarih;
}
public class KullaniciVT
{
public KullaniciDetay KullanicininBilgileri(int kullaniciKod)
{
/* kullanici bilgilerini veritabanindan cek
* kullaniciDetay class'indan bir nusha al
* vertabanindan gelen verileri bu nushaya yukle
* neticeyi, methodu cagirana dondur
* */
KullaniciDetay KullaniciBilgileri= new KullaniciDetay();
return KullaniciBilgileri;
}
public YetkilendirmeBilgi KullaniciYetkilendir(string
kullaniciAd,
string sifre)
{
// Bir adet connection ve bir adet command nesnesi
olusturalim
SqlConnection Conn = new
SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
// DSN parametresi, web.config dosyasinda,
// sekildeki gibi tutulmaktadir.
SqlCommand Cmd = new SqlCommand("SP$yetkilendir", Conn);
Cmd.CommandType =
System.Data.CommandType.StoredProcedure;
Cmd.Connection = Conn;

Ek B: C# ve OOP Klavuzu
Cmd.CommandType =
System.Data.CommandType.StoredProcedure;
Cmd.Connection = Conn;
// Parameter : @KullaniciKod
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@KullaniciKod",
System.Data.SqlDbType.Int, 4));
Cmd.Parameters["@KullaniciKod"].Direction =
System.Data.ParameterDirection.ReturnValue;
// Parameter : @kullaniciAd
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@kullaniciAd",
System.Data.SqlDbType.VarChar, 50));
Cmd.Parameters["@kullaniciAd"].Direction =
System.Data.ParameterDirection.Input;
Cmd.Parameters["@kullaniciAd"].Value = kullaniciAd;
// Parameter : @sifre
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@sifre",
System.Data.SqlDbType.VarChar, 50));
Cmd.Parameters["@sifre"].Direction =
System.Data.ParameterDirection.Input;
Cmd.Parameters["@sifre"].Value = sifre;
// Parameter : @yetkiSeviye
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@yetkiSeviye",
System.Data.SqlDbType.Int, 4));
Cmd.Parameters["@yetkiSeviye"].Direction =
System.Data.ParameterDirection.Output;
// Parameter : @sonGirisTarih
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@sonGirisTarih",
System.Data.SqlDbType.VarChar, 12));
Cmd.Parameters["@sonGirisTarih"].Direction =
System.Data.ParameterDirection.Output;
// Parameter : @isim
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@isim",
System.Data.SqlDbType.VarChar, 30));
Cmd.Parameters["@isim"].Direction =
System.Data.ParameterDirection.Output;
Conn.Open();
Cmd.ExecuteNonQuery();
string KullaniciKod=
Cmd.Parameters["@KullaniciKod"].Value.ToString();

689

690

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

if (KullaniciKod=="0")
{
Conn.Close();
return null;
}
else
{
YetkilendirmeBilgi YetkiBilgileri= new
YetkilendirmeBilgi();
YetkiBilgileri.kullaniciKod =
Cmd.Parameters["@KullaniciKod"].Value.ToString();
YetkiBilgileri.isim=Cmd.Parameters["@isim"].Value.ToString();
YetkiBilgileri.sonGirisTarih =
Cmd.Parameters["@sonGirisTarih"].Value.ToString();
Conn.Close();
return YetkiBilgileri;
}
}
public string KullaniciEkle(KullaniciDetay yeniKullanici)
{
/* Kullanici bilgilerini yeniKullanici nshasindan al
* Command nesnesine aktar
* ifadeyi calistir.
* neticesini cagrildigi yere dondur.
* */
return null;
}
}
}

KullaniciDetay ve YetkilendirmeBilgi snflar, veri klflamas (encapsulation) iin kullanlmaktadr. Ama, verilerin belli bir formatta btn olarak aktarlabilmesini salamaktr. Bu ama iin, C#'ta struct tipi deikenler de kullanlabilirdi ancak, biz
class'larla bu ii gerekletirdik.
pucu: struct, kk veri yaplarnn aktarlmasnda daha baarldr. Class ise referans bazl altndan,
byk verileri aktarrken tercih edilebilir bir klflama (encapsulation) yntemidir.
KullaniciVT snfnn birok metodu yeralmakta. nk, ele aldmz rnekte, btn ilemler bu snfa dmekte. Ancak snfn sadece rnekte gerekli olan ksmlarn
gerekledik, dier taraflarn basitlii korumak iin gereklemedik.
Bu metodlardan, KullaniciYetkilendir, dardan ald iki parametreyi kullanarak, SP$yetkilendir stored procedure'ne eriip veri katman ile bilgileri kontrol
edebilmektedir. Sonuta, yetkilendirme ilemi olursa, YetkilendirmeBilgi snfndan bir
nsha alnmakta ve bu nshaya doldurulan veriler (encapsulation) arld yere, gnderilmektedir. Yetkilendirme olmazsa, null deeri gnderilmektedir. Peki bu snf veritabanna hangi balant ifadesini kullanarak erimektedir?

Ek B: C# ve OOP Klavuzu

691

web.config dosyasna DSN ad ile bir balant ifadesi u ekilde eklenebilir:


ekil B.13:
Veritaban eriimi
ile ilgili ifadelerin,
XML formatnda
uygulamann
konfigrasyon
bilgilerini tutan
web.config dosyasna eklenmesi

web.config' de yer alan bu bilgiler, aadaki ekilde eriilip kullanlmaktadr.


SqlConnection Conn = new
SqlConnection(ConfigurationSettings.AppSettings["DSN"]);

Ancak, bu ifadeleri kullanabilmek iin, ilgili isimuzaylarn (namespace) yklemeniz gerekir. Bu iten sorumlu ierik, using System.Configuration; deyimi ile, ilgili
temel snflarn (base class) bulunduu ktphaneyi projemizin paras haline getirdik.
Byk uygulamalarda, i katman, ierisinde yer verilen btn snflar ve methodlarla
kendi bana bir proje olarak ele alnr ve bir dll haline getirilerek kullanlr. Btn i
katmann iine alan bu yapya, Application Framework (Uygulama Omurgas) ad verilir.
Sunum Katmann Tasarlamak

Bu snflar gerekledikten sonra, i katmanndaki ilemlerimizi bitirmi olduk. Sra geldi,


sunum katmanna. Sunum katmannda, bu iki dosyada yer alan snflar tretip kullanacaz. Bu tretme ileminin, bir nceki ASP rneinde Connection nesnesini kullanmaktan bir fark bulunmamakta.
Byk uygulamalarda, i katman, ierisinde yer verilen btn snflar ve methodlarla,
namespace yardmyla da dzenlenerek, kendi bana bir proje olarak ele alnr ve bir dll
haline getirilerek kullanlr. Btn i katmann iine alan bu yapya, Application
Framework (Uygulama Omurgas) ad verilir.
Ardndan, kullancdan verileri alabilecek ve verilerinin doru olup olmadn ona aktarabilecek bir aspx dosyasn aadaki ekilde tasarlayalm.
ekil B.14:
Yeni bir Form
balatp adn,
login.aspx olarak
deitirelim ve bir
Label, iki Textbox
ve bir adet de
Button nesnesi
ekleyelim.

692

Yazlmclar in SQL Server 2008 ve Veritaban Programlama


<%@ Page language="c#" Codebehind="login.aspx.cs"
AutoEventWireup="false" Inherits="Verivizyon.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--dosya: login.aspx-->
<HTML>
<HEAD>
<title>ye Giri Sayfas</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET
7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label id="LblSonuc" runat="server">
</asp:Label><BR>
Kullanici Adiniz<asp:TextBox id="TxtKullanici" runat="server">
</asp:TextBox><BR>
Sifreniz <asp:TextBox id="TxtSifre" runat="server"
TextMode="Password"></asp:TextBox>
<asp:Button id="BtnSubmit" runat="server" Text="Giris">
</asp:Button>
</form>
</body>
</HTML>

Codebehind dosyas, Visual Studio tarafndan otomatik oluturulmakta. Bizim tm yapmamz gereken, butonu ift tklamak ve ierisine u kodlar eklemek:
// yetkilendirmeyi yapacak sinifi olusturalim
Verivizyon.KullaniciVT kullanici = new KullaniciVT();
//yetkilendirme sonucunu encapsulate edecek sinifi
//olusturalim
Verivizyon.YetkilendirmeBilgi yetkilendirmeBilgi= new
YetkilendirmeBilgi();
//YetkilendirmeBilgi.KullaniciYetkilendir() metodunu
// nasl ardmza ve
// ifrenin nasl zetinin ekildiine dikkat edin...
yetkilendirmeBilgi =
kullanici.KullaniciYetkilendir(TxtKullanici.Text,
Verivizyon.Bilesenler.Guvenlik.OzetCek(TxtSifre.Text));
if(yetkilendirmeBilgi != null){
LblSonuc.Text = "Merhaba <b>" +
yetkilendirmeBilgi.isim +
"</b> sitemize en son <b>" +
yetkilendirmeBilgi.sonGirisTarih +

Ek B: C# ve OOP Klavuzu

693

"</b> tarihinde giris yaptiniz" ;


}

Grld zere, veritabanna dorudan bir eriim yer almamaktadr. Sadece, bir alt
katmanda oluturulan snflar nshalandrld (instantaiting) ve bu nesneler kullanld.
Uygulama ilk baladnda, ilgili mesaj kullanclarmza gstermek iin, u kodu da ekleyebiliriz:
private void Page_Load(object sender, System.EventArgs e)
{
if ( !IsPostBack)
LblSonuc.Text = "Ltfen Kullanici adi ve sifrenizi giriniz.";
}
ekil B.15:
Projenin alan
hali

EK C

BLM SONU SORU CEVAPLARI


Bu blmde her bir blmn sonunda yer alan tekrar sorularnn cevap anahtarlar yer
almaktadr.

1. Blm
1.

Verileri tablolara blerek saklayan ve tablolar arasnda ilikiler tanmlamaya olanak


salayan veritaban sistemine likisel Veritaban denir.

2.

likisel Veritabanlarnda sorgu amal kullanlan genel dile SQL denir.

3.

Birinci Anahtar: Bir tablodaki varlklar ayrt edici olarak bulunan ve tekrar etmeyen satra verilen addr. Yabanc Anahtar: Bir varla ait ek bilgilerin bulunduu
baka tablo(lar)da, varl temsil etmek zere bulunan birincil anahtar deerlerini
ieren stuna yabanc anahtar denir.

4.

Management Studio nesne temelli ve T-SQL temelli veritaban ynetim ilevleri


iin kullanlan SQL Server 2005 istemci yazlmdr.

5.

SQL Server Configuration Manager, SQL Server servislerinin balatlp durdurulmasn salar. letim sisteminde alan dier servisler de dahil servislerle ilgili daha
detayl bilgi Denetim Masas, Ynetimsel Aralar, Hizmetler ksmndan alnabilir.

6.

SQL Server ierisinde C# ile yazlm bir kod yer alabilir. Bu kodun almasndan
CLR birimi sorumludur.

7.

Tablo, view, stored procedure, trigger, constraint, indeks, stun, role, kullanc,
login, veritaban, kuruk, kontrat

8.

SQL Server 2 farkl sunucu seviyeli kullanc eriim modu destekler: Windows Only
ve Mixed Mode. Her biri konu ierisinde ele alnmtr.

9.

Bir ilikisel veritaban sorgulama Seme, z drme ve birletirme ilemleri desteklenmelidir.

10. Management Studio ve SqlCmd ortamlarnda T-SQL yazlp altrlabilir.


11. SQL 3 alt dil grubundan oluur:
DDL: CREATE, ALTER, DROP
DML: SELECT, INSERT, UPDATE, DELETE
DCL: GRANT, DENY, REVOKE

696

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

2. Blm
1.

Bir uygulamann veritaban katmann tasarlamak 3 aamada ele alnmaldr:


KAVRAMSAL: programn kullanlaca ortam ile ilgili model
MANTIKSAL: veritabannn teoriler ekseninde ve programclara gre ekillenmi hali
FZKSEL: veritabannn gerek olarak altrlabilir ve stabil halini gsteren model

2.

Bir veritabannda performans kayglarndan tr denormalizasyonlara bavurulacaksa, bu fiziksel model seviyesinde ele alnmaldr.

3.

Bir veritabannn boyunu ve artm miktarn ilk haldeki veri miktar ve zaman ierisinde eklenecek veri eilimi ile kestirebiliriz.

4.

Tempdb veritabannn boyutu ve bulunduu disk eriimleri hzlandrmak iin


nemlidir.

5.

Bir proje bittikten sonra srekli olarak Trke karakter problemleri ile karlaldnda, veritaban ve sunucu seviyeli Collation ayarlarnn dzgn olarak yaplandrlmas gerekiyor demektir.

6.

Bir uygulamada veritaban seviyesinde, veri eklemek ve deitirme gibi ilemlerde


tarih formatnda problem ekildiinde, veritabanna erien kullancnn default dilinin Trke olmas ileri kolaylatracaktr.

7.

SQL Server, tanmsal veri btnl tekniklerinden Constraint, Rule ve Default


nesnelerine destek verir.

8.

DEFAULT nesnesi ile ide olan Constraint Default Constraint'dir. Rule nesnesi
Check Constraint'in ilevini yerine getirir. Check constraint ayn ilevi daha az efor
ile yerine getirebilir.

9.

Birim Btnl ile Domain Btnl arasndaki en temel fark, birim btnl
bir satra ait verilerin kendi ierisinde tutarl olmasn hedeflerken, domain btnl bir stuna ait verilerin kendi iinde uyumlu olmasn hedefler.

10. Bir tabloda en fazla bir tane Primary Key Constraint yeralabilir.
11. Unique Constraint Primary Key Constraint'e ramen bir tabloda, PK dnda tekil
olmas gereken stunlar olduunda kullanlr. UC null olabilir, PK olamaz. Bir tabloda birden fazla fazla UC olabilir ama sadece bir tane PK olabilir.
12. Bir tabloya Unique Constraint eklenmek istediinde, tabloda nceden varolan kaytlarn en fazla bir tanesinin NULL olmas ve btn deerlerin birbirinden farkl
olmas gerekir.
13. Bir tablonun bir stununa gelebilecek deerlerin, baka bir tablonun ierdii deerlerden olmasnn SQL Server tarafndan denetlenmesi isteniyorsa hangi Constraint
tanmlanmaldr?
14. Ya dorudan Management Studio nesne ynetim arayzleri ile veya u yap ile:
ALTER TABLE tablo_ismi
ALTER COLUMN sutun_ismi
SET DEFAULT default_deger | fonksiyon_ismi()

Ek C: Blm Sonu Soru ve Cevaplar

697

15. likili iki tablodan birindeki veriler silindiinde veya gncellendiinde, ilikili bulunduu tabloya deiikliin yanstlabilmesi iin basamakl veri btnl tanmnn yaplm olmas gerekir. Aksi halde veri deiimi hi yaplmaz.
16. Veri eklemekle ilgili bir ilem iin Constraint'ler zorluk karyorsa gerekletirilebilecek en pratik zm bir sre constraint'leri susturmak, verileri ekleyip tutarl hale
getirdikten sonra geri amaktr.
17. Rule ve Default nesnelerinin yapabilecei eyleri Constraint'ler yapabildii halde, SQL
Server bu nesnelere geriye doru uyumluluk iin destek vermeye devam etmektedir.
3. Blm
1. Sorgu belli kriterleri salayan verileri veritabanndan semek demektir. Genel olarak bir sorgu SELECT, FROM ve WHERE yan cmleciklerinden olutur.
2. Tekrarlayan satrlar indirgemek iin DISTINCT deyimi kullanlr.
3. Metin ve tarihsel sabitler tek trnak ierisine alnarak kullanlr. Saysal sabitler dorudan kullanlr.
4. oker karakterler(_, % ve [XYZ] ile [^XYZ]) sadece LIKE operatr ile kullanlabilirler, '=' ile kullanlamaz.
5. Tarihi istenilen formatta gstermek iin CONVERT fonksiyonu kullanlr.
6.

SELECT isim + ' '' ' + soyad FROM tblKullanici

7.

Altsorgu bir SELECT ifadesi ierisinde baka bir SELECT ifadesi daha yer almasdr. Altsorgu ile ilgili [NOT] IN, [NOT] EXISTS gibi kelimeler ayrlm kelimeler
kullanlabilir.

8.

Normalizasyon amacyla farkl tablolara dalm verileri birletirip bir tek tabloymu gibi sorgulamak gerektiinde JOIN kullanrz.

9.

Inner Join ile Outer Join arasndaki temel fark; birletirmeye katlan her iki tabloda
sadece eleen kaytlar gelmesi gerektiinde INNER JOIN, tablolardan elemeyenlerin de sonuta yer almas gerektiinde de OUTER JOIN ifadeleri kullanlmasdr.

10. Full Outer Join'e birletirmeye katlan her iki tablonun da fazladan olan satrlarn
grmek gerektiinde ihtiya duyulur.
11. WHERE ile HAVING arasndaki fark, HAVING'in gruplanm veriler stnde filtreleme
yapmasna ramen, WHERE'in gruplamaya girmeden nce filtreleme yapmasdr.
12. CUBE, GROUP BY'dan sonra yer alan her stun iin iten da doru btn farkl
kombinasyonlardaki gruplamal fonksiyon sonularn bulur. ROLLUP ise, sadece
iten da doru sonular korele eder.
13. GROUP BY verileri gruplara ayrarak sorgulamak amacyla kullanlr. ORDER BY
ise verileri seme ilemi bittikten sonra sraya koymak iin kullanlr.
14. COMPUTE'in kullanld her yerde, COMPUTE BY ifadesi kullanlamaz.
COMPUTE BY ifadesi kullanabilmek iin, sorguda, ORDER BY deyimi ile birlikte,
ilgili stunun yeralmas gerekir. COMPUTE iin byle bir kstlama yoktur.
15. Bir tabloda yer alan btn kaytlar, loglamadan boaltmak iin TRUNCATE
TABLE deyimi kullanlr.

698

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

16. Bir tablodaki veriler, baka bir tablodaki veriler de kullanlarak gncellenmek durumunda iken oluturulan bir sorguda alt sorgu kullanlmazsa, hem MS Access hem
de MS SQL Server tarafndan kullanlamaz. nk veri gncelleme esnasnda yaplan JOIN ilemi bu iki VTYS iin farkldr.
17. CTE ve Tretilmi tablo birbirine ilev olarak ok benzer. Ancak CTE rekrsif sorgulara olanak tanmas ve baz birka ileme izin vermebilmesi nedeniyle tretilmi
tabloya nazaran daha ilevsel olabilmektedir.
18. PIVOT ve UNPIVOT satr ierisindeki deerlerden stun olutururken veya stunlar birer satr deeriymi gibi gstermek iin kullanlrlar.
19. Bir tablodaki satrlarda yer alan verilerden her birine baklarak ayr ayr ilemler
yapmak gerekiyorsa, Cursor tr bir deiken ile verilere erimemiz gerekir.
20. Transact-SQL Sunucu Cursor'ler ve API Sunucu Cursor'ler olmak zere iki farkl
Cursor tr iin SQL Server 2005 destek salar. Cursorler'den kilitlenme ve performans kayplar nedeniyle kanmak gerekir.
4. Blm
1.

View'ler karmak veritaban emalarn basitletirmek iin, gvenlik ve yetkilendirme maksatl, birim dnmleri gibi farkl grnmesi gerekli veri ihtiyacn karlamak maksatl, indekslenerek performans maksatl kullanlabilirler.

2.

WITH CHECK OPTIONS,baz satrlara eriimi olmayan bir view stnden kapsam dndaki verilere mdahale edilmesini engellemek amal kullanlr.

3.

view sadece kayt dndren ifadeler tayin etmek iin kullanlr. Oysa senonim, tablo,
stored procedure gibi bir ok trden nesne iin kalc takma ad tayin etmede kullanlabilir.

4.

Unique olmayan Clustered Indeks tanmlanabilir. Hatta bu genellikle doru kullanldnda performans artrc bir unsur olabilir.

5.

Bir stuna girilen verinin tekilliini salamak iin Constraint tanmlamadan zm


retilebilir. Constraint yerine tekil indekslerle de kaytlar tekil olmaya zorlanabilir.

6.

Bir indeks iin fillfactor deeri verilmezse, Global Fillfactor deerleri(Sunucu veya
veritaban seviyeli default ayarlar) esas alnarak indeks oluturulur.

7.

Oluturulmu bir indeks'in fillfactor deerini ALTER INDEX REBUILD ile deitirmek mmkndr.

8.

Primary Key Constraint ve Unique Key Constraint'lerin izdm olarak otomatik


Unique Indeksler tanmlanr. Bu indeksler DROP INDEX ile silinemezler.
Constraint silindii zaman otomatik olarak silinirler.

9.

Clustred Indeks'ler ve daha nce indekslenmi stunlar, covering indeks iin, tekrardan indekslenmezler. Bu nedenle, geriye kalan iki stunun indekslenmesi yeterlidir.
CREATE INDEX idx_Covering ON tblUrun(urunKod,urunAd)

Ek C: Blm Sonu Soru ve Cevaplar

699

10. CREATE UNIQUE CLUSTRED INDEX


cx_marka ON tblMarka (MarkaKod, Marka)
ile tanmlanan indeks,
SELECT markaKod, marka
FROM tblMarka WHERE marka='vestel'

Sorgusu iin, idealdir. nk, covering indeks'tir ve daha da iyi bir durum, clustred
bir indekstir.
11. Bir indeks iin sralama verilmezse, anahtarlar artan srada(ASC) olarak varsaylr.
Bu nedenle de artan deerler eklinde sralanr.
12. Bir tablo sadece bir tek nonclustred indeks ieriyorsa, bir heap tanmlanr. Verilere,
bu heap stnden eriilir.
13. Database Tuning Advisor bir Sql Profiler trace dosyasn veya bizim belirlediimiz
bir sorguyu ele alarak bu sorgu ile ilgili iyiletirmeler nerir. SQL Profiler, SQL Server'a gelen ve altrlan ifadeleri takip etmek maksatl kullanlr. Bu takibat kaydedip daha sonra DTA ile analiz edebiliriz.
5. Blm
1.

Stored Procedure'ler sistem stored procedure'leri, CLR Stored Procedure'ler,


Extended Stored Procedure'ler ve kullanc tanml stored procedure'ler gibi trler
halinde incelenebilirler.

2.

Bir stored procedure'n tanmnda hangi tablolara atfta bulunulduunu


sp_depends renebiliriz.

3.

Bir stored procedure'n kaynak kodunu WITH ENCRYPTION seenei ile tanmlanarak, bir bir stored procedure'n kaynak kodunu korumal hale getirebiliriz.
Encrypted Stored Procedure'ler SQL Profiler tarafndan da grntlenmezler ve
Replike edilemezler.

4.

Girdi parametreler, stored procedure'e deer aktarmak iin standart bir giri tanmlar. kt parametreler, zellikle stored procedure'n birden fazla deer dndrmesi
veya INTEGER tr dnda deer dndrmesi gerektiinde kullanlr. RETURN
deyimi, stored procedure sadece bir tek deer dndrecekse ve bu deer de
INTEGER ise kullanlabilir. Genellikle hata kodu, sorgudan etkilenen kayt gibi deerleri dndrmek iin kullanlr

5.

altrma plan, Procedure Cash denilen blgede tutulduu iin, karmak stored
procedure'ler genel olarak ikinci altrmada, ilk altrmaya gre daha hzl alrlar.

6.

Yerel Stored Procedure'ler oturuma zgdr. Ayn anda oturum aan fakl kullanclar birbirlerinin geici stored procedure'lerini gremezler.

7.

Bir stored procedure ilk almasnda hzl sonu getirmesine ramen takip eden almalarnda yava sonu getiriyorsa, stored procedure'n her altrlmada, yeniden
derlenmesi gerekiyor demektir. Bunun iin, stored procedure'n WITH
RECOMPILE seenei ile tanmlanmas performans artrc etkide bulunabilir

700

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

8.

Stored Procedure, derlenmitir. Yani altrma plan procedure cash denilen hafza blgesinde tutulmaktadr. lk altrmadan sonraki altrmalarda daha hzl netice verir. Script
ise, hi bir derlemeye tabi tutulmaz. Her altrlmasnda btn ilemler batan ele alnr.

9.

Kullanc tanml fonksiyonlar hesaplanm stun oluturmada kullanlabilir. Stun


olarak kullanlm bir kullanc tanml fonksiyon deterministik ise indekslenebilir.

10. Tablo gibi ve stun gibi olmak zere ilevsel olarak iki farkl Kullanc Tanml
Fonksiyon vardr.
11. Bir view parametre alamaz. Parametre alacak view gereksinimi iin Tablo gibi davranan Kullanc Tanml Fonksiyonlar kullanlabilir.
12. Fonksiyonlar, yan etkide bulunamadklar iin sistemdeki verileri deitiremezler.
Veritabanna veri ekleme ve silme gibi ilemler iin veritaban u noktas olarak
fonksiyonlar deil, stored procedure'ler kullanlr.
13. T-SQL dnda CLR dillerinde de KTF programlanabilir. zellikle CPU'yu youn
kullanacak ilemler iin tercih etmek
14. Bir tablo ile bir fonksiyonu, ayet tablonun bir stununu fonksiyon parametre olarak alyorsa, APPLY operatr yardm ile birletirebiliriz. Ama fonksiyon tablodan
bamsz tablo tipi sonu dndryorsa, APPLY operatr olmadan, JOIN ifadesi
ile birletirme yaplabilir.
15. EXEC() ve sp_executesql arasndaki fark, sp_executesql'in altrma plan optimize
edilebilir ifadeler altrmak iin uygun olmasdr. Bir veritabanndaki btn indeksleri yeniden derleyecek bir program yazmanz gerekse plan derleme gereksinimi
olmadndan EXEC() fonksiyonu ama dinamik olarak oluturulmas gereken ve
ok sayda verilerin olduu bir tabloyu sorgulayan bir ifadeyi parametrik altrmak
gerekiyorsa sp_executesql stored procedure'n tercih etmek mantkl olacaktr.
16. Bir SP ierisinde TRY-CATCH yaps kullanlmayan noktada hata meydana gelirse hata ele alnamaz ve program kullancsna programn almasnn krlmas olarak yansr.
17. RAISERROR fonksiyonu ile bir hata ortama frlatldnda balant kopuyorsa, hatann seviyesi 21 veya daha yukardaki bir deer ile frlatldn gsterir.
6. Blm
1.

XML veriyi XQuery ile sorgularz.

2.

XML bir veri tipinin 5 farkl metodu vardr.


.query: XQuery sogular iin kullanlr
.value: Deerleri skaler bir veritaban tipine dndrr
.exist: Bir XQuery sorgu sonunun olup olmadna bakar
.nodes: Bir XML dm dndrmek iin kullanlr
.modify: XML-DML ifadeleri altrmak iin kullanlr

3.

XML veri tipini herhangi bir metin tr(meslea NVARCHAR(MAX) )veri tipinden
ayran en nemli fark binary olarak parse edilmi olmas ve bu nedenle de eitli geerlilik denetlemelerine ve sorgulamalara tabi tutulabiliyor olmasdr.

Ek C: Blm Sonu Soru ve Cevaplar

701

4.

birincil ve ikincil indeks tanmlanabilir. XML stun stnde indeks tanmlamas, ait
olduu tablonun birincil anahtar olmasn ve stun stnde bir birincil XML indeks tanmlanm olmasn gerektirir.

5.

XML bir veriyi sadece veritabannda tutmak iin ilikisele evirmek, gereksiz ilem
maliyeti getirdii iin tercih edilmez.

6.

FOR XML tabular sorgu sonularn XML'e dntrr.

7.

OPEN XML, XML verileri ilikisel domaine dntrmede kullanlr. ve yardmc sistem
stored procedure'leri sp_xml_preparedocument ve sp_xml_removedocument'dir.

7. Blm
1.

Daha kk paralara ayrlamayan bir dize ilemin bir btn olarak ele alnmasn
salayan yapya transaction denir.

2.

SQL Server 3 eit transaction'a destek verir:

Otomatik Sabitleme: Normal olarak SQL Server'in alt Transaction modudur.


SQL Server'e gelen her bir batch tek bir transaction olarak ele alnr ve transaction,
batch'in altrlmas biter bitmez SQL Server tarafndan bitirilir.

Harici Transaction: Programc tarafndan BEGIN TRAN ile balatlan ve programc veya sistem tarafndan bitirilebilen, genel manada kastedilen transaction
modudur.

Dahili Transaction: SQL Server'in belli ifadelerden nce otomatik transaction balatmas eklindeki mod olup, bu moda geirme iini kullancnn veya programcnn
yapmas gerekir. Bu modda, her bir transaction aldnda, sonlandrma ii kullancya braklmtr.

3.

Ortak zamanl almada ortaya kan sorunlar:

Kayp Gncelleme(Lost Update)

Tekrarlamasz Okuma(non-repeatable Read)

Hayalet Okuma(fantom-read)

Kirli Okuma(dirty read)

4.

SQL Server u izolasyon seviyelerine destek salar:

Read Uncommited

Read Commited

Repeatable Read

Serialisible

5.

ki proses veya kullancdan her biri fakl ilemler yaparken aslnda karlkl olarak
dierinin bir sonraki admn tkayan ve bu nedenle de her ikisi de ilerleyemeyen
proseslerin iinde bulunduklar duruma dead lock denir.

702

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

6.

sp_lock ve sp_who sistem stored procedure'leri kullanlarak, kaynaklardan hangilerini kimler tarafndan kilitlendii grntlenir. Ardndan kilitleme yapan
transaction ksm gzden geirilir.

7.

Trigger'lar Stored Procedure'lerden ayran zellikler:

Dardan parametre almazlar

stediimiz zaman devreye sokamayz. Sadece belli veri deiimlerinde(EklemeSilme veya Gncelleme annda) devreye girerler

AFTER trigger'lar transaction'dan sonra devreye girerler

Tablolar stnde tanmlanabilirler.

Baka bir yerden arlamazlar ve sonu dndrlemezler.

8.

Ayn veritaban ierisindeki yabanc anahtar kontrol, basamakl veri btnl,


bir SQL ifadesinin etkiledii kayt saysnn gsterilmesi

9.

UPDATE ve DELETE ilemlerinin her ikisi iin de devreye girecek bir AFTER
trigger' yazlabilir. Ayn ekilde bir INSTEAD OF trigger' da yazlabilir. Ancak bu
durumda, UPDATE ve DELETE ilemlerinden herhangi biri iin ikinci bir
INSTEAD OF trigger' tanmlanamaz.

10. Trigger'lar da Constraint'ler gibi belli bir sre iin devre d braklabilirler.
Constraint'lerden farkl olarak, trigger pasif iken gerekletirilen ilemleri, trigger
aktif edildiinde denetleyemez. Bunun iin,
ALTER TABLE tablo_ismi
DISABLE TRIGGER trigger_ismi | ALL

yaps kullanlr.
11. Bir tablo stnde INSTEAD OF trigger varsa, ilk olarak bu tepkimeye girer. Arkasndan Constraint tepki verebilir. Constraint'ten sonra, tanml bulunan
trigger'lardan biri devreye girer. Ancak hangisinin nce girecei belirlenemez. Bu
nedenle, en son tepkimeye girecek nesne iki INSERT tirgger'ndan biridir ancak
hangisi olaca garanti edilemez. Garanti etmek iin, bir tek AFTER INSERT
trigger' ierisinde bu iki trigger'n uygun srada arlmas gerekir.
12. AFTER UPDATE trigger' devreye girdiinde, hem Inserted hem de Deleted szde
tablolarn oluturur.
8. Blm
1.

Assembly, CLR temelli kodlarn datm ve versiyonlama birimine verilen addr.


SQL Server iin assembly sadece dll uzantl CLR ktphanelerine verilen addr.

2.

Bir veritabannn yedei alndnda CLR bileenleri ve assembly'ler de yedeklenir.

3.

Bir assembly ierisinde yer alan metotlar ve tipleri grmek mmkndr.


SELECT * FROM sys.assembly_modules

Sorgusu bu trden bir bilgi almak iin kullanlabilir.

Ek C: Blm Sonu Soru ve Cevaplar

703

4.

CLR ortamnda Stored Procedure, Trigger, Kullanc Tanml Fonksiyon, Kullanc


Tanml Tip ve Kullanc Tanml Grupsallar programlamak mmkndr.

5.

Trigger, Stored Procedure ve skaler tip kullanc tanml fonksiyonlar sadece


metodlar eletirmekle tanmlayabiliriz.

6.

Teorik olarak, CLR bileenlerini T-SQL'e ramen kullanmay CPU'yu youn olarak
kullanan ilemler, .NET ktphanesine gereksinim duyan programlar, dk seviye
veri ilemi yapan ve veritaban seviyeli veri eriimleri dndaki ilemlerde kullanlr.

7.

Genelde Cursor yaplarndan kanmak iin ve sistemde hali hazrda bulunmayan grupsal
fonksiyonlar iin grupsallar kullanmak gerekir. SUM fonksiyonunu biz yazdnzda daha
hzl almaz. nk gerek SUM fonksiyonu alt seviyeli olarak gereklenmitir.

9. Blm
1.

Uzaktaki bir SQL Server'daki verileri hzl bir balant stnden, yereldeki SQL
Server'in ierdii verilerle birlikte sorgulamanz gerekiyorsa bal sunucu tanmlayarak bu tanmlama stnden sorgulamak yeterli olacaktr.

2.

Metin dosyalarn, Excel ve Access dosyalarn SQL Server'da birer tablo gibi sorgulayabiliriz. Bunun iin OLE-DB Driver'larn dinamik olarak ykleyecek cmlecikleri yazarz veya
bir bal sunucu tanmlayp bu sunucu stnden bu kaynaklar sorgulayabiliriz.

3.

Programlanabilir elerden Stored Procedure'ler ve Skaler sonu dndren kullanc tanml fonksiyonlar bir XML Web Servisi metodu olarak darya alabilir.

4.

Bir endpoint XML Web Servisi olarak yaplandrld ise, platform bamsz olarak,
XML Web Servisi tketebilen her trl uygulama balanabilir.

5.

Service Broker mimarisini gereklemek iin Tip, Contract, Mesaj, Kuyruk, Servis
Program, Servis, Route gibi bileenler kullanlr.

6.

Service Broker, SOA temelli mimariyi veritaban seviyesinde gereklemek gerektiinde kullanlr.

10. Blm
1.

ADO.NET 2 eit veri eriimine olanak salar: Bal Mod ve Kopuk mod.

2.

Ayn anda iki tane DataReader bir tek connection stnden veritabanna ADO.NET
2.0'dan itibaren MARS destei sayesinde eriebilir. Ayr iki Command nesnesi ile.

3.

Bal modda bir veritaban eriimi kodlamak iin 1. Connection nesnesinin Open()
metodu, 2. Command nesnesinin dnecek deer trne uygun bir metodu (Tabular
sonu iin ExecuteReader()) ve son olarak SqlDataReader stnden herhangi bir
satra eriebilmek iin Read() metodu kullanlr.

4.

DataSet, veritabannn minyatr olandr. DataTable ve constraint gibi nenseler


ierir. DataSet iin minyatr veritaban tabiri kullanlmasnn nedeni temel veritaban bileenlerini iermesinden kaynaklanmaktadr.

5.

Veri balama, veritabanndan gelen verileri kullanc arayzlerine ilintilendirme sistematii demektir.

6.

ASP.NET, Hzl Uygulama Gelitirme yaklamna SqlDataSource bileeni ile destek verir.

EK D

DKKAN VERTABANI EMASI

706

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

EK E

CD KULLANIM KILAVUZU

CD Kullanm Klavuzu
Kitapta anlatlan rnekleri en azndan kstl olarak altrabilmeniz iin lisanslama creti gerektirmeyen aralardan bir ksmn CD ierisinde bulabilirsiniz.
Aralar
Kitapta anlatlan rnekleri en azndan kstl olarak altrabilmeniz iin gerekli aralardan bir ksmn CD ierisinde bulabilirsiniz.
SQL Server Express Edition

SQL Server 2008'in cretsiz srm olan SSExpressEdition' CD ierisinde CDROM\


Araclar\SQLExpress yolunda bulabilirsiniz:
SQL Server 2008 Bileenleri

SQL Server 2008 iin BOL(Books Online) kurulumunu CDROM\Araclar\


SQLServer2008\SqlServer2K8_BOL_Apr2006_v2.msi adresinde bulabilirsiniz. Bu
dokman SQL Server hakknda yardm almak iin kullanabilirsiniz.
SQL Server 2008 iin Service-Pack 1 CD ierisinde yer olmamas nedeni ile yer almamaktadr. Ancak hangi adresten indireceinizi CDROM\Araclar\SQLServer2008\
SQLServer2008_service_pack_1.htm adresinde bulabilirsiniz.
cretsiz bir alma ortamn sisteminizde ayarlamak iin CDROM\Araclar\linkler\ altnda yer alan html dosyalarn inceleyebilirsiniz.
rnek Veritabanlar ve Kurulumlar
Kitap ierisindeki sorgularn stnde yapld rnek veritabanlarn sisteminizde SQL
Sever 2008 varken attach etmek isterseniz EK-A'daki Attach-Deattach bahsine gz atnz.
lgili veritabanlar sktrlm olarak, CDROM\Veriler\ dizini altnda aadaki adlarla
yer almaktadr.

708

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

ekil E.1:
CD ierisinde yer
alan veritabanlar
ve ilevleri

Veritaban Ad

Veri Dosyas Ad

lev

Dukkan veritaban

2000_dukkan_mdf_
ldf.zip

SQL Server 2000 formatnda olan bu


veritabann, eski formattaki bir veritabann 2005'e dntrme konusunda,
SQL Server'in 2000 srm ile alyorsanz, bu dosyay attach ederek
kitap ieriinin bir ksmn altrabilirsiniz.

Dukkan Veritaban

2008_dukkan_data_
mdf.zip

SQL Server 2008 kullancs iseniz ve


rnekleri dorudan SQL Server 2008
verileri stnde altrmak isterseniz
bu veritabann kullanabilirsiniz.

Adventureworks

adventureworks.zip

Microsoft'un SQL Server 2005 iin rnek bir bisiklet paras reticisi veritaban Adventureworks' bu dosya ierisinde bulabilirsiniz.

Dikkat: Sktrlm olan bu dosyalar, SQL Server'a attach edebilmek iin ncelikle diskinizde bir yere
amanz gerekir.
SQL Server Veritaban Srm Ykseltme Klavuzu
Eski bir srmde hali hazrdaki veritaban sisteminizi SQL Server 2008'e aktarma konusunda CD\Araclar\SQL2008UpgradeTechRef.pdf dokmanna gz atabilirsiniz.
alma Dkmleri
Her bir blme ait SQL ifadeleri dndaki uygulama rneklerini, baz altrmalar yapabilmeniz iin gerekli ek bilgileri CDROM\CalismaDokumleri klasr altnda bulabilirsiniz.

Kaynaka

Addison Wesley, A First Look at Microsoft SQL Server 2005 for Developers

Apress, Advenced-Transact SQL for SQL Server 2000

Introducing Microsoft SQL Server 2005 for Developers

MS Press, MCSA/MCSE/MCDBA Self-Paced Training Kit: Microsoft SQL Server


2000 (Exam 70-228 ve 70-229 ) 2nd ed.

MS Press, Microsoft SQL Server 2000 Performance Tuning Technical Reference

Wrox, SQL Server 2000 Professional Database Design

SAMS, Teach Yourself SQL in 21 Days

Que, SQL Server 2000 Programming by Example

BYTE Trkiye, Veritaban Programlama 1-2 Kitapklar

Microsoft, MSDN ve BooksOnline

www.verivizyon.com

www.csharpnedir.com

www.microsoft.com/sql

www.sswug.org

www.sqlservercentral.com

www. sqlnedir.com

Dizin
@@CONNECTION, 79
@@ERROR, 373, 379, 380, 390
@@IDENTITY, 135
@@ROWCOUNT, 390, 471
@@SERVERNAME, 79
@@TRANCOUNT, 444
@@VERSION, 79
1-N, 100, 101

A
Activity Monitor, 464, 465
ADD, 114, 147, 160, 162, 163, 164, 165, 168, 170,
267, 291, 390, 404, 408, 422, 424, 476, 503, 506,
531
Ad-Hoc, 376, 378, 548, 553, 592, 664
Aggregate, 77, 137, 214, 536, 537
AGGREGATE, 77, 214, 539
Alias, 128, 178, 203
ALTER, 70, 72, 73, 86, 113, 114, 115, 116, 117, 118,
119, 120, 121, 123, 147, 148, 159, 160, 162, 163,
164, 165, 168, 170, 172, 256, 258, 259, 261, 267,
291, 299, 300, 301, 302, 304, 306, 315, 353, 355,
360, 361, 362, 385, 390, 404, 406, 407, 408, 422,
424, 445, 446, 448, 457, 458, 470, 473, 476, 483,
484, 488, 489, 490, 503, 504, 505, 506, 528, 531,
552, 573, 587, 644, 645, 646
Anahtar, 47, 49, 87, 100, 104, 470, 476
AND, 165, 176, 181, 182, 183, 184, 193, 218, 238,
245, 274, 285, 286, 292, 304, 307, 311, 320, 321,
337, 350, 351, 352, 353, 355, 357, 360, 363, 481,
629, 667
ANSI SQL-92, 40
ANSI SQL-99, 211
API, 115, 334, 339, 340, 364, 497, 591, 594, 634, 668
APPLY, 387, 395, 396, 397, 413, 416, 417
AS, 79, 80, 120, 131, 141, 147, 163, 166, 178, 185,
192, 197, 198, 203, 207, 208, 215, 226, 227, 229,
230, 232, 233, 234, 235, 237, 238, 239, 240, 253,
254, 256, 258, 260, 261, 262, 263, 266, 268, 269,
298, 324, 331, 335, 336, 349, 350, 351, 352, 353,
354, 355, 356, 357, 360, 361, 362, 363, 364, 365,
366, 370, 371, 372, 377, 378, 380, 381, 384, 385,
389, 390, 391, 392, 393, 394, 395, 396, 397, 404,
412, 413, 424, 429, 434, 435, 436, 445, 446, 473,

475, 476, 477, 478, 479, 480, 481, 484, 485, 487,
488, 501, 524, 535, 580, 581, 582, 584, 585, 587,
600, 624, 651
ASC, 75, 176, 184, 227, 290
ASCII, 72, 129, 130, 131, 137, 191, 666
ASSEMBLY, 333, 498, 499, 500, 503, 504, 505, 506,
507, 524
AVG(), 77, 78

B
BETWEN.... AND...., 184
BIGINT, 394, 395, 473, 481
BIT, 321, 380, 394
Birincil Anahtar, 47, 87, 100, 383, 470
Books Online, 60, 82, 119, 187, 191, 207, 209, 215,
333, 347, 541, 551
BREAK, 332, 371
BULK, 119, 412, 429, 655, 656
Btnlk, 156, 169

C
CASCADE, 85, 155, 169, 170, 480
CASE, 222, 330, 331, 343
CHECK, 155, 161, 164, 165, 166, 172, 256, 261, 262,
263, 264, 408, 531
CHECKPOINT, 465
cmd, 56, 314, 346, 462, 517, 519, 520, 524, 530, 593,
596, 597, 598, 600, 601, 602, 603, 607, 609, 610,
612, 613, 614, 615, 624
Collation, 120, 130, 131
COMMIT, 442, 443, 444, 445, 446, 448, 449, 454,
457, 458, 553
Compiling, 348
COMPUTE, 222, 249, 254, 255, 334
COMPUTED COLUMN, 147, 290
Concatenation, 190
Configuration Manager, 54, 87
CONTINUE, 333, 585
Contract, 572, 575
CONVERT, 80, 192, 193, 363, 384, 385, 401, 402, 463
Corelated, 198

712

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

COUNT(), 77
CREATE, 70, 72, 73, 82, 83, 84, 108, 109, 111, 112,
115, 116, 118, 134, 135, 139, 141, 142, 143, 144,
145, 146, 148, 149, 159, 160, 161, 162, 163, 164,
166, 168, 208, 231, 235, 253, 254, 255, 256, 258,
260, 261, 262, 263, 268, 269, 289, 290, 292, 293,
294, 295, 296, 297, 298, 299, 301, 303, 304, 306,
307, 315, 323, 349, 350, 351, 352, 354, 356, 357,
360, 361, 363, 365, 370, 377, 378, 380, 383, 384,
385, 389, 390, 391, 392, 393, 394, 395, 403, 404,
412, 422, 423, 424, 425, 429, 443, 444, 445, 448,
470, 472, 473, 475, 476, 477, 478, 479, 480, 481,
483, 484, 485, 486, 487, 498, 499, 500, 501, 524,
535, 539, 540, 544, 552, 574, 575, 576, 577, 580,
581, 582, 584, 585, 588, 596, 600, 613, 624, 644,
651, 667
CROSS APPLY, 396, 397, 416, 417
CROSS JOIN, 204, 208, 209, 213
CTE, 225, 226, 227, 228, 229, 230, 234, 247, 249, 395
CUBE, 220, 221, 222, 249

kt Parametre, 361

D
DAC, 61, 62
Dal Seviye, 277
Database Tuning Advisor, 308, 310, 314, 316
DBCC, 122, 123, 124, 304, 305, 307, 444, 453, 505
DBCC SHRINKDATABASE, 123, 124
DBCC SHRINKFILE, 123
DEADLOCK, 467
DEALLOCATE, 335, 337, 338, 340, 371
DECLARE, 318, 319, 321, 323, 324, 327, 328, 332,
333, 334, 335, 336, 338, 340, 361, 362, 363, 364,
370, 371, 372, 389, 390, 394, 402, 418, 429, 473,
481, 485, 512, 544, 578, 580, 582, 584, 585
Default, 47, 108, 113, 114, 154, 155, 156, 157, 158,
159, 162, 163, 164, 167, 170, 172, 173, 184, 192,
312, 350, 357, 451, 549, 661, 696, 697
DELETE, 71, 73, 77, 86, 118, 148, 155, 169, 170, 226,
227, 241, 244, 245, 246, 247, 259, 284, 307, 325,
326, 327, 338, 341, 342, 362, 377, 378, 443, 448,
469, 470, 471, 472, 473, 477, 478, 479, 480, 481,
491, 514, 517, 527, 552, 652, 668
DENY, 82, 84, 85, 353
DESC, 71, 75, 176, 184, 185, 186, 227, 238, 240, 290,
337, 339

Deterministik, 77, 81, 390


Deve Notasyonu, 71
DISTINCT, 176, 177, 216, 371
Distributed Query, 551
Distributed Transaction, 553, 610
Domain, 156, 173, 551, 696
DROP, 70, 73, 86, 118, 124, 139, 143, 147, 148, 149,
163, 166, 172, 259, 295, 299, 301, 302, 303, 304,
306, 315, 327, 355, 370, 448, 470, 473, 483, 484,
488, 489, 503, 505, 506, 507, 528, 552, 644, 646,
668, 698
DTC, 609
Dukkan, 110, 116, 119, 120, 125, 142, 219, 256, 257,
267, 287, 300, 304, 305, 307, 311, 404, 405, 422,
458, 484, 490, 554, 571, 573, 575, 577, 579, 580,
581, 585, 587, 593, 595, 604, 607, 610, 616, 631,
644, 645, 646

E
ENCRYPTION, 256, 258, 353, 355, 389, 473, 588
Enterprise Manager, 114, 121, 122, 123, 150, 164,
167, 170, 298, 483, 488, 548
Entity, 155
Executing, 348
EXISTS, 176, 199, 200, 212, 329, 360, 377, 476, 477,
478, 479, 481
Explict, 444
Extend, 63, 64, 276, 464

F
FETCH, 335, 336, 338, 340, 371, 448
FILEGROWTH, 109, 111, 112, 114, 121, 267
FILENAME, 109, 111, 112, 114, 267
FILLFACTOR, 284, 287, 295, 296, 297, 300, 303, 306
Filtreli indeks, 294
Filtreli ndeks, 282, 293, 294
FLOAT, 133, 160
Fonksiyon, 48, 79, 179, 191, 192, 214, 222, 382, 388,
392, 393, 396, 494, 497, 500, 507, 528, 529, 530,
534
For, 409, 471, 473
FOR BROWSE, 334
FULL [OUTER] JOIN, 208

Dizin

G
GAM, 64
Geography, 564
Geometry, 564
GETDATE(), 79, 80, 81, 82, 95, 132, 155, 162, 192,
235, 350, 351, 352, 353, 355, 357, 363, 380, 383,
388, 390, 481, 485, 600
Girdi Parametre, 356
Global Deikenler, 322
GO, 73, 79, 81, 149, 164, 208, 253, 254, 263, 350,
351, 353, 355, 356, 357, 360, 361, 362, 363, 377,
378, 380, 476
GOTO, 333, 381, 382
GRANT, 82, 83, 84, 85, 116, 353, 448
GROUP BY, 176, 198, 212, 216, 217, 218, 219, 220,
221, 222, 249, 256, 258, 266, 330, 331, 337, 338,
339, 401, 530, 536, 539, 540
GROUPING, 222, 540

H
HASH, 210
HAVING, 176, 218, 219, 249, 338, 666
Hesaplanm Alan, 147, 424
HierarchyID, 139, 228, 555, 556
Hiyerarik Veri, 100
HOLDLOCK, 452, 466

I
IDENTITY, 134, 135, 208, 238, 247, 260, 261, 265,
268, 269, 326, 383, 384, 412, 470, 485, 581, 584
IF ... ELSE, 328
IN, 176, 195, 196, 212, 232, 233, 234, 235, 236, 239,
243, 295, 300, 337, 371, 388, 394, 433
Indeks, 47, 51, 63, 64, 65, 122, 154, 159, 161, 252,
259, 260, 261, 266, 271, 272, 273, 274, 275, 276,
277, 278, 279, 280, 281, 283, 284, 285, 286, 289,
290, 291, 292, 293, 294, 295, 297, 298, 299, 301,
302, 304, 306, 307, 310, 311, 313, 315, 316, 402,
422, 423, 463, 464, 698
INDEXDEFRAG, 304
INNER JOIN, 176, 204, 205, 206, 210, 213, 218, 350,
355, 356, 357, 377, 391, 393, 395, 434, 475, 476,
478
INSERT, 73, 74, 75, 84, 86, 118, 135, 139, 146, 149,
155, 156, 164, 227, 231, 235, 241, 242, 243, 244,
246, 259, 260, 261, 263, 264, 269, 284, 325, 326,

713

327, 337, 351, 360, 380, 384, 385, 388, 392, 393,
394, 406, 407, 412, 416, 419, 429, 443, 444, 448,
449, 469, 470, 471, 472, 473, 475, 476, 478, 479,
480, 481, 485, 488, 491, 514, 528, 552, 553, 580,
581, 584, 596, 607, 610, 615, 635, 655, 656, 668
INSTEAD OF, 259, 469, 470, 471, 473, 480, 481, 482,
483, 489, 491, 527
INT, 86, 116, 135, 139, 149, 172, 208, 231, 263, 264,
319, 327, 332, 333, 356, 360, 363, 364, 365, 372,
377, 378, 383, 384, 385, 389, 390, 391, 393, 395,
403, 412, 422, 424, 429, 485, 512, 524, 534, 535,
600, 613, 651, 655
Intermediate, 277, 496

likisel Veritaban, 39, 40, 41, 42, 53, 87, 96, 271,
281, 695
Katman, 50, 686

J
JOIN, 112, 118, 176, 202, 203, 204, 205, 206, 207,
208, 209, 210, 217, 218, 219, 222, 229, 230, 232,
233, 234, 243, 244, 245, 256, 258, 260, 284, 285,
331, 350, 351, 352, 353, 355, 356, 357, 365, 377,
391, 392, 393, 395, 396, 405, 433, 475, 476, 477,
478, 479, 481

L
LEFT [OUTER] JOIN, 176, 207
LIKE, 131, 165, 176, 180, 187, 188, 189, 190, 274,
314, 315, 357, 524, 597, 607, 632
LOG ON, 109, 111, 112

M
Macar Notasyonu, 71, 72
Management Studio, 49, 55, 56, 60, 69, 82, 87, 100,
108, 109, 114, 115, 117, 121, 122, 123, 124, 125,
143, 144, 145, 150, 151, 159, 161, 167, 171, 172,
268, 299, 302, 305, 309, 318, 350, 457, 458, 464,
470, 474, 475, 487, 500, 524, 548, 549, 553, 583,
639, 640, 644, 646, 647, 653, 657
Master, 61, 124, 587, 661
MAX(), 77, 233
MAXSIZE, 109, 111, 112, 114, 121, 267
MERGE, 210, 266
MIN(), 77, 233

714

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

Microsoft Search, 54
Mixed Extend, 63, 64
Mode, 49, 67, 68, 463, 663
Model, 90, 95, 102, 105, 119, 661
MODIFY, 114, 121
MONEY, 235, 318, 319, 324, 390, 444, 445, 446
MSDTC, 553
mssqlsystemresource, 62

N
NAME, 109, 111, 112, 114, 121, 267, 274, 500, 501,
524, 535, 539, 544, 576, 587
NEWID(), 135, 139, 140, 187, 326
N-N, 101, 102
NOLOCK, 450, 453, 455, 466
NORECOMPUTE, 300, 302
northwind, 113, 476, 549, 552, 553, 554, 595
NOT, 71, 73, 134, 143, 144, 145, 147, 148, 149, 159,
176, 181, 183, 195, 199, 200, 208, 212, 244, 245,
263, 268, 329, 337, 357, 363, 403, 422, 444, 476
NOT EXISTS, 176, 199, 200, 212, 244, 245, 329, 476
NOT IN, 195, 212
NULL, 72, 73, 78, 99, 119, 128, 134, 139, 142, 143,
144, 145, 147, 148, 149, 154, 156, 159, 161, 164,
165, 166, 167, 169, 170, 183, 184, 191, 206, 208,
214, 216, 220, 228, 229, 230, 233, 245, 258, 260,
263, 268, 298, 304, 337, 354, 357, 360, 363, 377,
378, 380, 383, 385, 389, 397, 401, 403, 417, 422,
432, 435, 436, 444, 473, 512, 537, 542, 581, 584,
629, 645

O
OLAP, 45, 51, 53, 61, 231, 235, 283, 284, 650
OLTP, 45, 51, 61, 283, 284, 287
OPENROWSET, 79, 412, 429, 551, 553, 554
OR, 164, 165, 166, 181, 182, 195, 243, 321, 337, 360,
363, 385, 478, 585, 629, 665, 666, 667, 668
ORDER BY, 75, 79, 176, 184, 185, 186, 212, 216, 217,
218, 227, 236, 237, 238, 239, 240, 246, 249, 254,
255, 275, 297, 330, 337, 338, 339, 340, 372, 401,
409, 411, 435, 530, 535
osql, 56, 57, 323, 664

P
PAD_INDEX, 284, 287, 295, 296, 297, 300, 303, 306

PAGLOCK, 466
Parametre, 57, 110, 137, 345, 356, 359, 360, 362,
374, 375, 402, 488, 520, 549, 551, 554, 595, 598
Parsing, 348
Persist, 141
PFS, 64
PI(), 179, 388
PIVOT, 225, 231, 232, 233, 234, 235, 247, 249, 331,
371
PL/SQL, 40
Point, 137, 447, 497, 564
Polygon, 564
PRINT, 323, 324, 329, 333, 380, 381, 384, 385, 484,
487, 518, 519, 581, 584
PROCEDURE, 47, 323, 350, 355, 377, 378, 380, 382,
384, 385, 576, 580, 581, 582, 584, 585, 587, 667
pubs, 73, 76, 77, 142, 253, 351

Q
Queue, 365, 572, 576

R
RAD, 633
RAISERROR, 373, 375, 376, 377, 378, 379, 381, 382,
398, 476, 477, 478, 479, 519
READ COMMITTED, 466
READ UNCOMMITTED, 466
READPAST, 466
RECOVERY, 118
Recursive, 482, 483
Rekrsif, 225, 228, 229, 230, 393
REPEATABLEREAD, 466
REPLACE(), 388
Resource, 463
REVOKE, 82, 85, 448
RIGHT [OUTER] JOIN, 176, 207
RMO, 647
ROLLBACK, 442, 443, 444, 445, 446, 447, 449, 453,
455, 463, 465, 467, 472, 476, 477, 478, 479, 482,
484, 553
ROLLUP, 221, 222, 249
Root, 407
ROWCOUNT, 246, 326, 337, 338, 343, 352, 380, 390,
394, 471, 582, 585

Dizin
ROWLOCK, 466
Rowset, 79
RULE, 47, 154, 166, 173, 323, 350

S
sa, 67, 79, 80, 167, 168, 169, 255, 354, 372, 445, 498,
595, 604, 625, 626, 627, 628, 635, 663, 664, 667
SAC, 58, 59, 583
Satr, 45, 46, 47, 78, 97, 129, 139, 145, 155, 175, 214,
237, 238, 240, 280, 335, 342, 448, 449, 455, 466,
618, 674
SCHEMABINDING, 256, 258, 259, 297, 298, 424, 505
Seme, 39, 48, 69, 180
SERIALIZABLE, 452, 454, 455, 457, 466, 467
Serialisible, 452
Service Manager, 54
SET, 76, 119, 120, 123, 135, 139, 169, 170, 184, 191,
243, 244, 246, 269, 299, 301, 302, 319, 320, 321,
330, 337, 338, 343, 352, 353, 355, 356, 357, 360,
361, 362, 363, 370, 371, 372, 384, 385, 394, 402,
411, 418, 419, 420, 421, 445, 446, 453, 454, 455,
457, 458, 464, 465, 467, 473, 475, 483, 485, 498,
499, 503, 504, 512, 544, 553, 573, 580, 585, 609,
627, 629, 635
Seyrek Stun, 142
Seyrek Tablo, 142
SGAM, 64
SHRINK, 118, 119, 123
SIN(), 388
SIZE, 109, 111, 112, 114, 121, 267
Skaler, 79, 270, 388, 390, 391, 511, 518, 529, 530,
533, 537, 598, 602
Skaler Fonksiyon, 79, 270, 390
SMALLDATETIME, 192, 380
SMO, 602, 639, 640, 641, 642, 644, 645, 646, 647,
648, 650, 655
Snap-shot, 454
sp_catalogs, 550
sp_columns_ex, 550
sp_executesql, 369, 372
sp_foreignkeys, 550
sp_helpdb, 114, 120, 347, 351, 388
sp_helptext, 257, 258, 346, 347, 350, 388, 474
sp_tables_ex, 550
SQL enjeksiyonu, 349, 666
Sql Profiler, 459, 468

715

SQL Server Agent, 54, 60


SqlCmd, 56, 57, 58
SSIS, 650, 657, 659, 660
STATISTICS, 118, 295, 300, 302, 307, 308, 349
Status, 122, 463, 610
Stored Procedure, 40, 48, 51, 67, 73, 157, 158, 241,
242, 253, 270, 323, 325, 334, 345, 346, 347, 348,
349, 350, 351, 353, 355, 356, 363, 364, 369, 383,
386, 387, 388, 398, 401, 429, 469, 491, 493, 494,
497, 504, 507, 509, 511, 514, 522, 523, 524, 525,
526, 528, 529, 534, 540, 550, 592, 596, 597, 599,
600, 601, 606, 607, 624, 640, 664, 667, 681, 686
SUM(), 77, 544
Sunum Katman, 50, 691
SUSER_SNAME(), 162, 667
Stun, 41, 42, 46, 47, 86, 141, 147, 153, 156, 159,
161, 162, 164, 178, 264, 286, 374, 383, 398, 408,
462, 463, 479
sys.columns, 61
sys.databases, 61, 456, 573
sys.messages, 61, 373, 374, 375, 376, 382
sys.objects, 60, 61, 329
sys.types, 61, 143
syscomments, 257, 258, 348, 354, 473
sysdatabases, 109
sysmessages, 373, 375, 376
systypes, 143

T
Tablo, 40, 41, 42, 45, 51, 57, 61, 64, 66, 79, 87, 90,
97, 103, 110, 118, 125, 127, 129, 130, 133, 136,
137, 139, 145, 148, 153, 156, 166, 171, 177, 180,
181, 188, 191, 192, 193, 204, 206, 209, 211, 214,
226, 230, 233, 246, 257, 270, 272, 273, 279, 281,
284, 290, 304, 310, 317, 320, 321, 325, 326, 327,
340, 342, 348, 370, 374, 375, 378, 382, 383, 387,
391, 392, 393, 395, 396, 402, 413, 419, 431, 432,
443, 446, 452, 462, 463, 464, 466, 467, 471, 472,
479, 488, 494, 497, 499, 502, 513, 514, 518, 520,
527, 529, 533, 534, 537, 541, 549, 550, 551, 554,
572, 593, 595, 597, 598, 602, 618, 623, 626, 629,
630, 634, 640, 656, 664, 666, 672, 674, 677, 686
TABLOCK, 466
TABLOCKX, 466
tempdb, 61, 111, 148, 149, 300, 449, 459, 661
TEXT, 74, 95, 136, 137, 146, 293, 380, 401, 651
THEN, 222, 330, 331

716

Yazlmclar in SQL Server 2008 ve Veritaban Programlama

TINYINT, 163, 263, 383, 394


TOP, 186, 212, 226, 227, 246, 249, 324, 327, 337,
343, 372, 431, 432, 435, 436, 437, 578, 582, 585,
614
Transact SQL, 40, 69, 109, 164, 171, 298, 318, 346,
349
Transaction Log, 62, 107, 108, 110, 113, 121, 122,
125, 326, 491
Trigger, 40, 48, 51, 137, 153, 157, 171, 326, 334, 349,
401, 469, 470, 471, 472, 473, 475, 476, 477, 478,
480, 482, 483, 484, 486, 487, 488, 489, 490, 491,
493, 494, 497, 504, 507, 511, 514, 522, 526, 527,
528, 686
TRUNCATE, 124, 148, 246, 247, 364, 448, 472, 477,
654
TRY-CATCH, 333, 369, 373, 381, 382, 398, 445, 459
Tuning, 309, 310, 311, 312, 313, 314, 315, 709
Tretilmi Stun, 177, 178, 185, 190, 390
TYPE, 80, 143, 434, 464, 540, 544, 574, 575, 578, 580

U
Ulama, 74, 137
UNION, 204, 210, 211, 212, 227, 228, 229, 230, 262,
263, 264, 395, 554, 666
UNIQUE, 161, 162, 238, 278, 281, 290, 291, 298, 301,
315, 401
UNIQUEIDENTIFIER, 135, 578, 580, 582, 585
Uniform Extend, 63
UPDATE, 71, 73, 76, 86, 118, 139, 140, 146, 155, 169,
170, 184, 226, 227, 241, 243, 244, 246, 259, 261,
284, 308, 325, 326, 330, 341, 342, 349, 360, 363,
394, 418, 419, 420, 421, 443, 445, 446, 448, 449,
453, 454, 456, 457, 458, 464, 467, 469, 470, 471,
472, 473, 475, 478, 479, 480, 481, 488, 491, 514,
552, 596, 609, 627, 629, 635, 652, 668
UPDLOCK, 466
USE, 56, 58, 70, 73, 74, 76, 77, 82, 115, 120, 253,
267, 269, 300, 308, 311, 323, 340, 342, 351, 406,
453, 457, 458, 476, 580, 587, 596, 600, 656
USER, 48, 82, 115, 116, 118, 372, 384, 485
User Defined Type, 542

V
VARCHAR (MAX), 95, 146, 296, 402, 425

Veri Btnl, 153, 154, 157, 159, 166, 275, 620


Veri Katman, 50
Veri Kontrol Dili, 70, 82, 353
Veri Tanmlama Dili, 39, 53, 69, 70, 107, 127, 153,
201, 225, 251, 271, 289
View, 47, 61, 251, 252, 253, 254, 255, 256, 257, 258,
259, 260, 262, 263, 270, 297, 310, 311, 315, 350,
387, 388, 391, 408, 470, 471, 554, 630

W
WHEN, 222, 330, 331
WHERE, 75, 76, 77, 118, 139, 176, 180, 181, 182,
183, 184, 185, 187, 188, 189, 190, 193, 195, 196,
197, 198, 199, 200, 201, 202, 203, 204, 209, 216,
217, 218, 219, 226, 227, 228, 229, 230, 238, 239,
243, 244, 245, 247, 249, 253, 254, 261, 273, 274,
279, 281, 284, 285, 286, 292, 304, 307, 311, 314,
315, 316, 326, 327, 330, 337, 338, 342, 350, 351,
352, 353, 354, 355, 356, 357, 360, 363, 365, 372,
375, 377, 378, 388, 389, 390, 391, 393, 394, 395,
409, 411, 415, 419, 420, 421, 423, 425, 433, 434,
445, 446, 457, 458, 475, 477, 478, 479, 481, 485,
517, 524, 530, 573, 578, 579, 597, 600, 602, 603,
607, 609, 627, 628, 629, 632, 635, 651, 652, 665
WHILE, 317, 332, 333, 336, 338, 371, 394, 582, 585
WITH CHECK, 256, 261, 262, 264, 315
Workload, 310, 312

X
XACT_ABORT, 553
XLOCK, 466
XQuery, 41, 53, 138, 401, 402, 408, 409, 411, 412,
413, 414, 415, 416, 418, 419, 420, 423, 425, 439,
484, 584
XSD, 138, 401, 402, 403, 404, 405, 406, 408, 425,
433, 439, 484, 574

Y
Yn, 323, 443

Z
Zamanam, 465

You might also like