Saklı yordam (Stored Procedure), kaydedebileceğiniz hazırlanmış bir SQL kodudur, böylece kod tekrar tekrar kullanılabilir.
Bu nedenle, tekrar tekrar yazdığınız bir SQL sorgunuz varsa, bunu saklı yordam olarak kaydedin ve ardından kullanmak için çağırın.
Ayrıca, saklı yordama gönderilen parametre değerlerine göre hareket edebilmesi için parametreleri bir saklı yordama iletebilirsiniz.
Stored Procedure Yazım Kuralı
Create Procedure procedure_Adi
-- varsa parametreler
as
Sql Kodları
Stored Procedure Çağrılması
exec procedure_Adi --varsa parametreler
Nortwind (Türkçe) veritabanı hakkında bilgi almak ve indirmek için Tıklayınız .
Aşağıda temel seviyeden ileri seviyeye stored procedure örnekleri mevcuttur.
İyi çalışmalar dilerim.
Örnek Sorgular - 1
Örnek sorgular Northwind (Kuzeyyeli) veritabanına göre hazırlanmıştır. Detaylı bilgi için Tıklayınız.
1- Tüm müşterileri listeleyen SP yazınız.
--Oluşturulması
Create Proc spTumMusteriler
as
Select * from Musteriler
--Kullanımı
exec spTumMusteriler
2- Dışarıdan gönderilen bilgilere göre Nakliyeci kaydeden SP yi yazınız
4- Dışarıdan gönderilen bilgiye göre Nakliyeciyi silen SP yi yazınız
--Oluşturulması
create proc spNakliyeciSil
@nakliyeciID int
as
delete from Nakliyeciler where NakliyeciID = @nakliyeciID
--Kullanımı
exec spNakliyeciSil 4
--veya
exec spNakliyeciSil @nakliyeciID=4
5- Dışarıdan gönderilen bilgilere göre Nakliyeci kaydeden SP yi yazınız. Aynı telefon numarası varsa kaydetmeyiniz.
--Oluşturulması
create proc spNakliyecilerEkle
@SirketAdi nvarchar(40),
@Telefon nvarchar(24)
as
declare @sayi int
set @sayi = (Select count(*) from Nakliyeciler where Telefon = @Telefon)
if @sayi>0
begin
print 'Böyle bir telefon numarası kayıtlı'
end
else
begin
insert into Nakliyeciler (SirketAdi,Telefon)
values (@SirketAdi,@Telefon)
print 'Nakliyeci eklendi.'
end
--Kullanımı
exec spNakliyecilerEkle 'NakliyeciAdi', '(555) 123-1234'
--veya
exec spNakliyecilerEkle @sirketAdi = 'NakliyeciAdi', @telefon ='(555) 123-1234'
6- Gönderilen KategoriID ye göre ürünleri listeleyen SP yi yazınız.(UrunID,UrunAdi,KategoriAdi)
--Oluşturulması
create proc spUrunlerKategoriID
@kategoriID int
as
select u.UrunID,u.UrunAdi,k.KategoriAdi
from Urunler u inner join Kategoriler k on u.KategoriID = k.KategoriID
where k.KategoriID = @kategoriID
--Kullanımı
exec spUrunlerKategoriID 2
--veya
exec spUrunlerKategoriID @kategoriID=2
7- Dışarıdan gönderilen musteriID ye göre o müşterinin satın aldığı ürünleri ve kaç adet satın aldığını listeleyen SP yazınız.
--Oluşturulması
create PROCEDURE spMusteriUrunAdet
@MusteriID nchar(5)
AS
SELECT u.UrunAdi, SUM(sd.Miktar) as ToplamAdet FROM Urunler u
inner join [Satis Detaylari] sd on u.UrunID=sd.UrunID
inner join Satislar s on sd.SatisID = s.SatisID
WHERE s.MusteriID = @MusteriID
GROUP BY u.UrunAdi
--Kullanımı
exec spMusteriUrunAdet 'ALFKI'
--veya
exec spMusteriUrunAdet @MusteriID='ALFKI'
8- Dışarıdan gönderilen iki tarih arasında sevk edilen satışları listeleyen SP yi yazınız.
--Oluşturulması
create proc spSatisIkiTarih
@basTarih smalldatetime,
@bitTarih smalldatetime
as
select * from Satislar where SevkTarihi between @basTarih and @bitTarih
--Kullanımı
exec spSatisIkiTarih '01.01.1997','02.01.1997'
--veya
exec spSatisIkiTarih @basTarih='01.01.1997',@bitTarih='02.01.1997'
9- Dışarıdan gönderilen SatisID ye göre yapılan satışın UrunAdi,BirimFiyati,Miktar,İndirim,İndirimli toplam fiyatı şeklinde listeleyen SP yi yazınız.
--Oluşturulması
Create Procedure spSatisDetay
@SatisID int
AS
SELECT UrunAdi,
BirimFiyati=ROUND(Od.BirimFiyati, 2),
Miktar,
İndirim=CONVERT(int, İndirim * 100),
İndirimliToplamFiyati=ROUND(CONVERT(money, Miktar * (1 - İndirim) * Od.BirimFiyati), 2)
FROM Urunler P, [Satis Detaylari] Od
WHERE Od.UrunID = P.UrunID and Od.SatisID = @SatisID
--Kullanımı
exec spSatisDetay 10248
--veya
exec spSatisDetay @SatisID = 10248
10- Dışarıdan gönderilen sayı kadar en yüksek fiyata sahip ürünleri listeleyen SP yi yazınız. Sayı gönderilmezse 10 adet ürün listeleyiniz.
--Oluşturulması
Create Procedure spEnPahaliUrunler
@sayi int = 10
as
SET ROWCOUNT @sayi
SELECT Urunler.UrunAdi AS TenMostExpensiveUrunler, Urunler.BirimFiyati
FROM Urunler
ORDER BY Urunler.BirimFiyati DESC
SET ROWCOUNT 0
--Kullanımı
exec spEnPahaliUrunler 5 -- 5 tane ürün listelenir
--veya
exec spEnPahaliUrunler @sayi = 5 -- 5 tane ürün listelenir
--veya
exec spEnPahaliUrunler -- 10 tane ürün listelenir
11- Dışarıdan gönderilen iki tarih arasında satışı yapılan indirimli ürünlerin UrunAdi, İndirim, SatisTarihi şeklinde listeleyen SP yi yazınız.
--Oluşturulması
Create Procedure spIkiTarihArasiIndirimliUrunler
@basTarih smalldatetime,
@bitTarih smalldatetime
as
Select
u.UrunAdi,sd.İndirim,s.SatisTarihi
from Urunler u
inner join [Satis Detaylari] sd on u.UrunID = sd.UrunID
inner join Satislar s on s.SatisID = sd.SatisID
where sd.İndirim > 0 and
s.satisTarihi between @basTarih and @bitTarih
--Kullanımı
exec spIkiTarihArasiIndirimliUrunler @basTarih = '01.01.1996', @bitTarih='12.12.1996'
--veya
exec spIkiTarihArasiIndirimliUrunler '01.01.1996','12.12.1996'