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