Merhaba arkadaşlar, bu yazımda SQL Server Store Procedure kullanımını anlatacağım. Bu yazımı okuyan arkadaşların Store Procedureler ve kullanımları hakkında bilgi sahibi olmasını sağlamaya çalışacağım.
Öncelikle Store Procedurelerin ne olduğu hakkında biraz bilgi vermem gerekirse, Store Procedureler veritabanı üzerinde saklanan SQL cümleleri yani yordamlardır. Store Procedureler parametre alarak veya parametresiz kullanılırlar. Bu procedureler sayesinde veritabanı üzerinde bazı işlemler yapabilir ya da gerekli sorguları yazdığımız zaman bize veri döndürmelerini sağlayabiliriz. Bir kez yazıp derlediğimiz zaman veritabanı altında Programmability > Store Procedure düğümü altında bulunur.
Peki neden istemciden (programımızdan) Sql komutları göndermek varken ayrıca veritabanı üzerinde Store Procedureler oluştururuz? Çünkü Store Procedureler yalnızca ilk çalışmasında birkez derlenir daha sonra çağırıldıklarında derlenmeden çalışırlar ve veritabanı üzerinde çalıştığı için daha hızlı çalışırlar. İstemci program üzerinde bulunmak yerine veritabanı içinde oldukları için veritabanının taşındığı her yerde vardırlar. Bu sayede de SQL kodlarımız ile programlama dili ile yazdığımız kodların ayrışmış vaziyette bulunmalarını sağlar.
KULLANIMI
- Parametre almayan Procedure kullanımı
1 2 3 4 5 |
CREATE PROCEDURE procedureadi AS BEGIN Calistirilacakkomut END |
CREATE PROCEDURE ibaresinden sonra Procedure e vermek istediğimiz ismi yazarız. BEGIN ve AND arasında kalan alan kapsam anlamına gelir. Çalıştırılacak kodlar bu kapsam arasına yazılır.
Örneğin Kisiler tablosunda bulunan tüm kayıtları getirmek için yazmamız gereken Procedure aşağıdaki gibi olacaktır.
1 2 3 4 5 |
CREATE PROCEDURE Kisiler_SelectAll AS BEGIN SELECT * FROM Kisiler END |
Peki bu Store Procedure nasıl çalıştırılır? Bunu da EXECUTE veya EXEC komutu ile yaparız.
1 |
EXEC Kisiler_SelectAll |
Komutunun çalıştırılması ile bize dönen sonuç aşağıdaki gibidir.
- Parametreli Store Procedure kullanımı
1 2 3 4 5 6 7 |
CREATE PROCEDURE procedureadi @parametre1 parametretipi, @parametre2 parametretipi AS BEGIN Calistirilacakkomut END |
Yine Kisiler tablosundan bir Procedure ile örneklendirelim.
1 2 3 4 5 6 7 |
CREATE PROCEDURE Kisiler_Select @Adi nvarchar(50), @Yas int AS BEGIN SELECT * FROM Kisiler WHERE Adi=@Adi AND Yas=@Yas END |
Parametreli Store Procedure de parametresizden farklı olarak sorguda kullanılacak olan parametre, başına ‘@’ işareti konularak Procedure adından sonra yazılır. Yanına bu parametrenin tipi tabloda kullanıldığı gibi yazılır. Parametreler istenildiği kadar artırılıp azaltılır. Daha sonra BEGIN ve END aralığına parametreli sorgu yazılır. Çalıştırma kısmında ise parametresiz sorguda olduğu gibi EXEC komutu ile çalıştırılır ancak burada farklı olarak procedure de istenen parametre değerleri de buradan yollanır.
1 |
EXEC Kisiler_Select 'Nur',24 |
Yazdığımız parametreli Store Procedure deki Adi parametresine ’Nur’ değerini Yas parametresine ise 24 değerini gödererek Procedure u çalıştırdık. Bunun sonucunda bize dönen sonuç aşağıdaki gibidir.
- Silme işlemi yapan Procedure kullanımı
1 2 3 4 5 6 7 |
CREATE PROC procedureadi @parametre parametretipi (silme işleminde parametre id dir) AS BEGIN Çalıştırılacaksorgu END GO |
Silme işlemi yapan bir procedure yazmak istiyorsak parametre olarak Id yi kullanırız dedim ancak bu zorunlu bir kural olarak düşünülmemelidir. Sileceğimiz kayda Id sinden ulaşabiliriz mantığı ile bunu not düştüm fakat farklı şekilde de kullanılabilir.
Yine Kisiler tablomuzdan faydalanarak bir kaydı silme işlemi yapan procedure yazalım.
1 2 3 4 5 6 7 |
CREATE PROC Kisiler_Delete @Id int AS BEGIN DELETE FROM Kisiler WHERE Id= @Id END GO |
Yukarıdaki kod çalıştırılıp silme işlemi yapan Procedure oluşturulduktan sonra yine EXEC komutu ile bu Procedure çalıştırılı. Procedure çalıştırıldıktan sonra Id sini verdiğimiz kayıt silinir. Kayıt silindikten sonra tablonun son halini görmek için yukarda yazmış olduğumuz Procedure Kisiler_SelectAll u tekrar çalıştırabiliriz. Proceurelerin bir kez yazılıp derlenip tekrar tekrar çalıştırılabildiklerini zaten yukarıda belirtmiştim.
1 2 |
EXEC Kisiler_Delete '1' EXEC Kisiler_SelectAll |
Yukarıda bulunan kod satırını çalıştırğım zaman aşağıdaki sonucu elde ederim. Gördüğünüz gibi 1 numaralı Id ye sahip Nur isimli kayıt silindi.
- Güncelleme işlemi yapan Procedure kullanımı
Güncelleme yapan Procedurede de en az iki parametre kullanılır.İlk parametreile güncelleme yapılacak olan kayıt belirlenir. Farklı bir kullanıma gidilmediği sürece kayıt belirleyici parametre Id dir. Diğer parametre ise kayıtta değişiklik yapılacak olan kolondur. Yine Kisiler tablosu üzerinden örneklendireceğim.
1 2 3 4 5 6 7 8 9 |
CREATE PROC Kisiler_Update @Id int, @Adi nvarchar(50) AS BEGIN UPDATE Kisiler SET Adi=@Adi WHERE Id= @Id END GO |
Yukarıda ki Procedure de Id si verilen kaydın Adi alanı parametre olarak yollanan değer ile değiştirilsin böylece o kayıt güncellensin isteniyor.
1 2 |
EXEC Kisiler_Update '4',’UpdateNur’ EXEC Kisiler_SelectAll |
Update Procedure yukarıda bulunan komutlar ile çalıştırılıyor ve aşağıdaki çıktıda gördüğünüz gibi Id si 4 olan kaydın Adi alanına ‘UpdateNur’ stringi yazılıyor.
Procedureler ile ilgili anlatacaklarım bu kadar Soru ve görüşleriniz için yorum yapabilirsiniz. Kolay gelsin .. 🙂
Anlatım için teşekkürler
peki bu Procedureleri asp.net sayfalarında nasıl kullanacağız?
teşekkürler