MSSQL Server Stored Procedure, bir SQL komut kümesinin (SELECT, INSERT, UPDATE, DELETE vb.) bir araya getirilip, belirli bir işlem ya da sorgu setinin tekrarlı olarak kullanılabilmesi için veritabanı üzerinde saklanan, adlandırılmış bir program parçasıdır. Bu prosedürler, genellikle belirli bir işlemi tekrarlamak ve veri üzerinde işlem yapmak amacıyla kullanılır. Oluşturulan bu procedure’ler sadece ilk çalıştığında derlenir. Bu sebepten procedure her çalıştığında ilk oluşturulan execution plan yapısını kullanır. Derleme süresine takılmadığı için performans anlamında çok hızlı olacaktır. Sorgunun aynı execution plan ile çalışması bazen parameter sniffing problemine yol açabilir.
Stored Procedure Özellikleri:
- Prosedür, SQL Server veritabanında saklanır ve istenildiği zaman çalıştırılabilir.
- Giriş parametreleri alarak daha dinamik hale getirilebilir.
- Aynı işlem defalarca yapılacaksa, prosedür yazıp her seferinde tekrar kullanabilirsiniz.
- SQL Server, prosedürün derlenmiş bir planını tutar, bu da her seferinde sorgu optimizasyonu yapmasına gerek kalmadığı için performans sağlar.
Stored Procedure Oluşturma
Aşağıda basit bir Stored Procedure örneği bulunmaktadır. Bu örnekte, bir kullanıcının bilgilerini eklemek için bir prosedür yazacağız.
1. Örnek:
Önce Users adında bir tablo oluşturalım:
CREATE TABLE Users (
UserID INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Email NVARCHAR(100)
);
Aşağıda, yeni bir kullanıcı eklemek için bir stored procedure oluşturuluyor:
CREATE PROCEDURE AddUser
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Email NVARCHAR(100)
AS
BEGIN
-- Yeni bir kullanıcı eklemek için INSERT komutunu çalıştırıyoruz.
INSERT INTO Users (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email);
-- Eklenen kullanıcının UserID'sini döndür.
SELECT SCOPE_IDENTITY() AS NewUserID;
END;
- CREATE PROCEDURE AddUser: AddUser adında bir stored procedure oluşturuluyor. Bu prosedür 3 parametre alır: @FirstName, @LastName, ve @Email.
- INSERT INTO Users (FirstName, LastName, Email): Parametreleri kullanarak Users tablosuna bir kayıt ekleriz.
- SELECT SCOPE_IDENTITY(): Son eklenen kaydın UserID değerini döndürür. Bu, eklenen kullanıcının otomatik artan ID değerini almak için kullanılır.
2. Stored Procedure Çalıştırma
Bu prosedürü çalıştırmak için şu komutu kullanabilirsiniz:
EXEC AddUser @FirstName = 'Yunus', @LastName = 'Yücel', @Email = 'info@yunusyucel.com';

Bu komut, Users tablosuna ‘Yunus’ adında, ‘Yücel’ soyadında ve ‘info@yunusyucel.com’ e-posta adresine sahip bir kullanıcı ekleyecek. Ayrıca, yeni kullanıcının UserID değeri döndürülecektir.
3. Stored Procedure Kullanımı ile Parametreler
Stored Procedure’ler parametreler alabilir ve bu parametreler ile veri üzerinde işlem yapılabilir. Aşağıdaki örnekte, kullanıcıların soyadına göre listeleme yapan bir prosedür oluşturulmaktadır.
Stored Procedure: Kullanıcıları Soyadına Göre Listeleme
CREATE PROCEDURE GetUsersByLastName
@LastName NVARCHAR(50)
AS
BEGIN
SELECT UserID, FirstName, LastName, Email
FROM Users
WHERE LastName = @LastName;
END;
Procedure çalıştıralım:
EXEC GetUsersByLastName @LastName = 'Yücel';
Bu komut, LastName değeri ‘Yücel’ olan tüm kullanıcıları listeleyecektir.
4. Parametre Olmadan Stored Procedure Çalıştırma
Parametre almayan prosedürler de oluşturulabilir. Aşağıdaki prosedür, tüm kullanıcıları listelemek için yazılmıştır.
CREATE PROCEDURE GetAllUsers
AS
BEGIN
SELECT UserID, FirstName, LastName, Email
FROM Users;
END;
Bu prosedürü çalıştırmak için:
EXEC GetAllUsers;
Bu komut, Users tablosundaki tüm kayıtları döndürecektir.
5. Stored Procedure’de Hata Yönetimi
Stored Procedure’lerde hata yönetimi de önemlidir. SQL Server, hata oluştuğunda özel hata mesajları döndürmenize olanak tanır. Aşağıdaki örnekte, hata kontrolü yapan bir prosedür örneği bulunmaktadır.
CREATE PROCEDURE AddUserWithErrorHandling
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Email NVARCHAR(100)
AS
BEGIN
BEGIN TRY
INSERT INTO Users (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email);
END TRY
BEGIN CATCH
-- Hata mesajı ve hata kodu döndürülür.
SELECT ERROR_MESSAGE() AS ErrorMessage, ERROR_NUMBER() AS ErrorCode;
END CATCH
END;
Bu prosedür, bir hata meydana geldiğinde, hata mesajını ve hata kodunu döndürecektir.
6. Geriye değer döndüren stored procedures yapısı
Aşağıdaki komut ile ilgili procedure geriye bir değer dönmektedir. Aşağıdaki ifade ile geriye dönen değeri elde etmeyiz.
CREATE PROC URUNFIYAT
@FIYAT MONEY
AS
SELECT*FROM Urunler WHERE BirimFiyati>@FIYAT
RETURN @@ROWCOUNT
EXEC URUNFIYAT 50
Kaç ürün etkilendiğini görmek için aşağıdaki komut kullanılmaktadır.
declare @sonuc int
EXEC @sonuc= URUNFIYAT 50
print convert(varchar(100),@sonuc)+' '+'ürün etkilenmiştir.'
7. Output parametresi ile geriye değer döndüren stored procedure yapısı.
CREATE PROC ORNEK23
(
@ID INT,
@ADI NVARCHAR(50) OUTPUT,
@SOYADI NVARCHAR(50) OUTPUT
)
AS
SELECT @ADI=Adi,@SOYADI=SoyAdi from Personeller where PersonelID=@ID
Yukarıdaki komutumuzda id değerini alıp kullanıcının adı ve soyadını output parametresi olarak dönmektedir.
declare @adi varchar(10), @soyadi varchar(10)
exec ORNEK23 5,@adi OUTPUT,@soyadi OUTPUT
SELECT @adi+' '+@soyadi
Stored procedured üzerinde varsayılan değerler set edebiliriz. Şimdi bir örnek üzerinden konuya değerlendirelim. Eğer herhangi bir değer girilmezse varsayılan değer set edilecektir. Aşağıdaki resim dikkat edilirse. Girilen kolon haricinde diğer değerler default olan değerlerdir.
CREATE PROC VARSAYILAN
@ADI NVARCHAR(50)='BELIRTILMEDI',
@SOYADI NVARCHAR(50)='BELIRTILMEDI',
@SEHIR NVARCHAR(50)='BELIRTILMEDI'
AS
INSERT Personeller(Adi,SoyAdi,Sehir)VALUES(@ADI,@SOYADI,@SEHIR)
EXEC dbo.VARSAYILAN 'TALAT','YUCEL' ,'ELAZIG'
EXEC dbo.VARSAYILAN 'KADIR'
EXEC dbo.VARSAYILAN 'IBRAHIM','YUCEL'
EXEC dbo.VARSAYILAN

Stored Procedure’ler, veri manipülasyonlarını, raporlama işlemlerini ve veritabanı üzerinde yapılacak diğer işlemleri daha verimli ve güvenli hale getiren güçlü araçlardır. Aynı işlemi defalarca çalıştırmak yerine, SQL Server üzerinde bir kez yazıp tekrar tekrar kullanabilirsiniz. Bu, veritabanı yönetimini daha düzenli ve hatasız hale getirebilir.
Başka bir makalede görüşmek dileğiyle..
“Allah içinizden iman edenlerin ve kendilerine ilim verilenlerin derecelerini yükseltir.” Mücâdele – 11