Yazılım Bir Tutku

Tecrübe ilimden üstündür !

Stored Procedur ( Saklanmış Yordam )

Tarih : 16.06.2010 12:35:30 Kategori : MSSQL Hit : 5379

Projelrimizde performans noktasında olmazsa olmazlarımızdan biridir Stored Procedur ler. Bu makalede Stored Procedur lere değinicez.

 SQL'de yazılan her T-Sql tümleciği aşağıda belirttiğim 4 işlemden geçer.

ÖRNEK T-SQL CÜMLECİĞİ  :  "select MakaleBaslik, MakaleAciklama, MakaleIcerik from Makaleler where MakaleId=1"  olsun..

 1. Syntax kontrol: From yerine form' u yazılmış gibi..
 2. Nesne kontrolü: Makale yerine Makela'mı yazıldı..
 3. Execution Plan: Veriye en hızlı nasıl ulaşırım ( Index )
 4. Sorguyu Çalıştır, Sonucu Görüntüler: ...

Stored Procedure' ler ilk çalıştıkları anda ilk 3 aşamayı gerçekleştirirler, 2. ve daha sonraki işlemlerde sadece 4. kısmı yaptıkları için performans kazancı sağlarlar.
 

 Syntax:
 Create Proc ( ya da Procedure ) Isım
 (Varsa)@parametre tip, @parametre2Adi tip...
 as
 sorgu

 

Tüm ürünleri gösteren Procedure.

Create Proc pr_TumUrunler
as
Select
* from Products

 

Bu Procedure'yi çalıştırmak içim;

exec pr_TumUrunler

ya da 
execute pr_TumUrunler

Exec yazmanıza gerek yok!!!

pr_TumUrunler

Sp' lerde (Stored Procedure kısaltılmışı) parametre kullanılması

Create Proc pr_IdyeGoreUrun
@urunNo
int
as
Select
* from Products WHERE ProductId=@urunNo
pr_IdyeGoreUrun 1

En fazla satlan 5 ürün

Create Proc pr_EnFazlaSatanKacUrun
@adet
int
as
Select
Top (select @adet) ProductName, Sum([Order Details].Quantity)

Bir parametreyi bir değişkene eşitlemeyeceksek (select @parametre) şeklinde yazılır.

From Products Join [Order Details] On
Products.ProductId=[Order Details].ProductId
Group By ProductName Order By 2
Desc
pr_EnFazlaSatanKacUrun 7

 

2 Parametreyi birlikte kullanalım

2 tarih aralığındaki satışlar kime yapıldı, kim yaptı?

Create Proc pr_TariheGoreSatis
@ilkTarih DateTime, @ikinciTarih
DateTime
as
 
SELECT dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Employees.LastName, dbo.Employees.FirstName

FROM dbo.Orders INNER JOIN

dbo.Customers ON dbo.Orders.CustomerID = dbo.Customers.CustomerID INNER JOIN
dbo.Employees ON dbo.Orders.EmployeeID = dbo.Employees.
EmployeeID
WHERE Orders.OrderDate between @ilkTarih and
@ikinciTarih
pr_TariheGoreSatis '08.01.1996', '08.25.1996'

 

Kategori Id' ye göre ürün isimler

Create Proc pr_KategoriyeGoreUrun
@kategoriID
int
as
Select
ProductName from
Products
WHERE CategoryId=@kategoriID
pr_KategoriyeGoreUrun 2

 

Prodecure' yi değiştirelim..

Alter Proc pr_KategoriyeGoreUrun
@kategoriID
int
as
Select
ProductName, UnitPrice from
Products
Where CategoryId=@kategoriID
pr_KategoriyeGoreUrun 2

Producure' yi silelim..

Drop Proc pr_KategoriyeGoreUrun

 

Insert, Update, Delete iin Producure' ler..

Create Proc pr_KategoriEkle
@ad nvarchar(25), @aciklama nvarchar(100
)
as
Insert
into Categories(CategoryName, Description) values (@ad,@aciklama
)
pr_KategoriEkle 'Mobilya','Aa odun vs..'

Kategori Güncelle

Create Proc pr_KategoriDuzenle
@kategoriID int, @ad nvarchar(25), @aciklama nvarchar(100
)
as
Update
Categories SET CategoryName=@ad, Description=@aciklama WHERE CategoryID=
@kategoriID
pr_KategoriDuzenle 11, 'Mobilyack','Aalar,vs..'

Buradaki sırayla ilk olarak id numarasını, daha sonra adını ve daha sonra açıklamasın girdik.

Buradaki sıra yukardaki parametleri yazarken olan sıraya göre olacaktır. 

Kategori Sil

Create Proc pr_KategoriSil
@id
int
as
Delete
from Categories WHERE CategoryID=@id
pr_KategoriSil 11

Output Parametre ile SP Kullanımı

Bazı zamanlarda SP' lerde değiikenlerin prodecure içinde değer almasını isteyebiliriz.

Böyle durumlarda değişken Output olarak tanımlanır ve değersiz bir biçimde prodecure' de kullanılır.

Çalışan ekle ve ID' sinin değerini ver.

Create Proc pr_KisiEkle
@ad
nvarchar(20), @soyad nvarchar(20), @kisiID int Output

--@kisiID int Output diyerek değersiz olacağını belirtiyoruz. Yani bunu değersizce al, prodecure' den değerli bir şekilde geri gönder.

as
Insert
into Employees (FirstName, LastName) values (@ad, @soyad)

Output parametre son eklenen kişinin ID değerini alsın..

set @kisiID=@@identity

Nasl kullanılır?

Öncelikle değişken tanımlanır.

Declare @numara int
exec
pr_KisiEkle 'Ahmet', 'Mehmet',@numara
Output
Print
@numara

Satış yapalım..

Create Proc pr_SatisYap
@musteriNo nvarchar(5), @calisanNo int, @tarih DateTime
,
@urunNo int, @adet int, @birimFiyat Money, @indirimOrani
float
as

Öncelikle Order tablosuna veri girelim..

Insert into Orders (CustomerId, EmployeeId, OrderDate) values (@musteriNo,@calisanNo,@tarih)

2. tabloya veri girmek için Orders tablosuna eklenen kayıtan OrderID değerine ihtiyacım var.

Declare @sonSiparisId int
set
@sonSiparisId=@@identity

2. tabloya kayt yapalım..

Insert into [Order Details]
values (@sonSiparisId,@urunNo,@birimFiyat,@adet,@indirimOrani
)
pr_SatisYap 'ALFKI',1,'02.17.2009',5,100,25,0

Buradaki Tablo, kolon isimlerini vs.. ler Northwind Databasesi üzerinden örneklemelerle vermeye çalıştım. İlgili databaseyi buradan indirebilirsiniz. Umarım faydalı olmuştur. Sağlıcakla kalınız.

Takip Ediyorum

Faydalı Projeler

Yorumlar

Merhaba Engin; Stored Procedurünü tanımladıktan sonra SqlCommand kısmında Stored Procedurünü çağırıyosun. Tam olarak ne yapmak istediğini paylaşırsan daha net yardımcı olabilirin.

Merhaba hocam stored procedur leri çok iyi anlamışsınız örneklerde çok güzel ama ben bunları C# ta nasıl kullanıcam onu yapamadım bu konuda yardımcı olabilirmisiniz.

Sizde Yorumda Bulunun

Konuya dair fikir ve sorularınızı paylaşın