Daha önce stored procedure konusu ile giriş yapmıştık. Biraz daha ayrıntılı olarak değinmeye çalışacağım, bilmediğimiz ve dikkat etmemiz gereken bilgileri yazmaya çalışacağım. Stored procedurelerin adhoc sorgulardan daha hızlı ve stabil çalıştığını ve bununda adhoc sorgu için her çalıştırmada tekrar oluşturalacak execution planın stored procedure için ilk çalıştırmada oluşturulması ve diğer seferlerde bu planı oluşturmadan direk kullanmasından kaynaklandığını biliyoruz.
Stored Procedure’lerin diğer avantajlarını da şu şekilde sıralayabiliriz
— Çok fazla işlem içeren stored procedure’ler normal sorgulara göre daha az network trafiği oluştururlar. Bunun sebebi örnek olarak 300 satırlık kod bloğunu çalıştırmak yerine ilgili sp ve paremetreleri gönderilir. Buda uygulama ile sql server arasındaki trafiğin azalmasını sağlar.
–Sp’ler fonksiyonlara benzer olarak yazılan bir kodun aynı şekilde veya farklı parametrelerle tekrar kullanılabilir.
–Sp’lerle bilgi saklama sağlanabilir. Sp’nin içeriğini bunu kullanan kişilerden gizlenmesi ve kullanıcının sadede sp nin yaptığı işi ve nasıl çalıştığıyla ilgilenir.
Output Parametrelerin Kullanımı
Bir stored procedure için parametre tanımladığımızda ve parametrenin input mu yoksa output mu olduğunu belirtmezsek sql server tarafında default olarak input parametre olarak alınacaktır. Output parametreler input parametrelerden farklı olarak stored procedure içinde yapılan işlem sonucunun bir değişkene atanması ve bu değişkenin stored procedure çalışmasından sonra kullanılmasıdır.
create procedure sp_selProductNumber @Color varchar(20), @ProductCount int output as begin select * from Production.Product where Color=@Color select @ProductCount=@@ROWCOUNT end
Yukarıdaki sp mizde @ProductCount alanı output olarak atanmış, değeri sp içinde tanımlanmış ve stored procedure dışında da bu değer okunabilecektir.
declare @pcount int exec sp_selProductNumber 'black',@pcount select @pcount
Stored Procedure’lerin Şifrelenmesi
Oluşturmak istediğimiz bir stored procedure’ün içeriğini şifrelemek için sp adından sonra with encryption ifadesini kullanmalıyız.
create procedure sp_selProductNumber with encryption @Color varchar(20), @ProductCount int output as begin select * from Production.Product where Color=@Color select @ProductCount=@@ROWCOUNT end
Şifrelenen bir sp içeriğini daha sonra görmek için DAC (Dedicated Admin Connection) kullanarak sql server bağlanarak sys.sysobjvalues view’ini kullanmalıyız.
Stored Procedure Execute As Kullanımı
Execute as deyimi ile veri tabanımız üzerinde oluşturulmuş olan bir sp başka bir kullanıcı yetkileri kapsamında çalıştırabiliriz. Bunun için sp mizi aşağıdaki gibi oluşturabiliriz.
create procedure sp_selProductNumber with execute as caller | owner | self | 'User Name'
Caller parametresi : Varsayılan olarak kullanılan bu parametre kullanılmasa da aynı yetkiye sahip olur.
Owner parametresi: Sp’nin sahibinin yetkileriyle çalıştırılmasını sağlar.
User Name parametresi: Bu parametre ise başka bir kullanıcı hesabıyla çalıştırılmasını sağlar.
Stored Procedure’ler Hakkında Bilgi Alınması
Oluşturduğumuz stored procedure’ler hakkında detaylı bilgi almak için sys.sql_modules ve sys.procedures adlı view nesnelerini kullanabiliriz.
İyi çalışmalar…