12 Kasım 2010 Cuma

SQL Server'da View

İlişkisel veritabanlarında bilgiler tablolarda saklanır. Bu tabloların kesişimleri ve  birleşimleri ile View'ler oluşturulabilir. View'lerda veri tutulmaz. Sadece tabloların bir görünümüdür. View aslında sanal bir tablodur.
Bir view iki tablonun birleşimi olabilir.

View'lar birden fazla tablodan daha kolay veri almak için kullanılır. Program içinde yazılan kod daha basit olur. Yine tablolardaki bazı sütünlar gizlenebilir. View'lar ile sadece istediğimiz bilgilere ulaşabiliriz. Böylelikle bizi gereksiz bilgilerden kurtarmış olur. View'ler bir çeşit istatistik olarakta kullanılabilir. Bir tabloda kaç üye var gibi bilgiler bir view'e yazılabilir. Örneğin;














1. tablomuz öğrenci isimlerinin tutulduğu Ogrenciler tablosu olsun. 2. tablomuz ise sınıf adlarının tutulduğu Siniflar tablosu olsun. Öğrencilerin hangi sınıfta olduğu isimleriyle birlikte SinifID alanlarıyla birleştirilerek tek bir tabloda gösterilebilir.



Select o.*,s.*
From Ogrenciler o
Join Siniflar s on o.SinifID=s.SinifID

10 Kasım 2010 Çarşamba

Stored Procedure


Stored Procedure’ler database server üzerinde saklanan SQL cümlecikleridir. Parametreler alabilirler ve size sonuçlar döndürebilirler. Avantajları arasında DB server üzerinde olmasından dolayı daha hızlı çalışmaları, sadece ilk çalışmalarında derlenmeleri sonraki çalışmalarda derlenmemeleri (bu da neden hızlı olduğunu açıklıyor) SQL cümlecikleri ve programlama dilleri ile yazdığımız kodları birbirinden ayrıştırmamızı sağlaması sayılabilir.
Store Procedure  veritabanı üzerinde saklanan yordamlardır.  Yordamlar dışarıdan parametre alabilir ve geriye veri veya bilgi gönderebilirler.
Fonksiyon yazmamızın bir nedeni, yazılan kodun birden fazla kez kullanımını sağlamaktır. Bir kere yazdıktan sonra derlenir ve istediğimiz kadar çağırabiliriz.
Store Procedure'de isimlendirme yapılırken genellikle spProsedürAdı şeklinde yapılması, okunabilirliği arttırır.
Begin-End arasında kalan yer kapsam anlamına gelir. Buradaki anlamı Procedure içindeki kapsamı gösteriyor. Aynı şekilde While döngüsü, If koşulu  kullanmak istediğimizde Begin - End ile kapsamı belirtebiliriz.
Çalıştırma yaparken ise EXEC ProsedürAdı veya EXECUTE  ProsedürAdı komutlarını kullanarak yapabiliriz.

CREATE PROCEDURE UrunleriGetir @CategoryID int
   AS BEGIN

   SELECT *
   FROM
     Production.Product P
   WHERE
     P.ProductCategoryID = @CategoryID 

    END

    EXEC UrunleriGetir @CategoryID = 1

Yukarıda  Urunleri ekrana getirmek amaçlı bir prosedür oluşturmuş olduk. Tanıttığımız parametrenin değeri Product tablosundaki ProductCtaegoryID' ye eşit olursa bize o ürünün  tüm bilgilerini gösterecektir.
Parametre, SQL kodunuzdaki değişkenlerin atanmasında kullanılır. Kullanımı zorunlu değildir, ama programcının işini çok kolaylaştırır. Parametre alan bir fonksiyon yazmak istediğimizde ise prosedür adından sonra parantez içinde parametreleri veririz. Fakat parametre verirken @ işaretini kullanılır. Ayrıca parametrelere varsayılan değerde atama yapılabilir.

Geriye değer döndüren prosedürlerde out veya output kullanılır. Bu kelimeleri kullanarak, hangi parametrenin değer döndürdüğünü SQL SERVER'a tanıtırız.
SQL SERVER içinde değişken tanımlamak için DECLARE anahtar kelimesini kullanılır.

SP’ler şu faydaları sağlar:

1. Uygulamanın getirdiği bazı iş kuralları prosedür içinde tanımlanabilir. Bir kez oluştuktan sonra bu kurallar birden çok uygulama tarafından kullanılarak daha tutarlı bir veri yönetimi sağlanır. Ayrıca bir fonksiyonelliğin değişmesi ihtiyacı doğduğunda her uygulama için değişiklik yapmak yerine, sadece bir platformda değişiklik yapılır.


2. Tüm prosedürler üstün performansla çalışır ancak birden fazla çalıştırılacak olan prosedürler sorgulama planları procedure cache içinde saklandığından daha da hızlı çalışırlar.

3. Stored Procedure’ ler SQL Server start ettikten sonra otomatik olarak çalıştırılmak üzere ayarlanabilirler.

4. Stored Procedure’ ler harici olarak kullanılırlar. Uygulama tarafından çağrılmak zorundadırlar. Otomatik devreye giremezler.

5. Stored Procedure’ lerın içinde SQL sorgulama diline ek olarak T-SQL komutlarını kullanabiliriz.

6. Kullanıcının bir tabloya erişim izni olmasa bile o tablo üzerinde işlem yapan bir stored procedure’ ü kullanma izni olabilir.