Merhaba arkadaşlar,

Bu yazımda SQL Server da Stored Procedure kullanımından bahsedeceğim.

Projelerimizde bazı sık kullandığımız işlem yapan sql cümlelerini stored procedure yapmamızda fayda var. Bu şekilde bu sql cümlesini projenin bir çok yerinde kullanmaktansa yazdığımız stored procedure ü kullanabiliriz ve herhangi bir değişiklikte kodun tamamını değiştirmektense sadece stored procedure u değiştiririz.

Mesela bir finans uygulamamız olduğunu düşünelim. Sisteme fatura girildiği zaman başka bir özet tabloya ilgili cari için borç-alacak kayıtlarını stored procedure ile oluşturabiliriz. Bu şekilde kodumuzun birden çok yerinde fatura oluşturma işlemi varsa biz bunların hepsini stored procedure ile halledebiliriz.

Şimdi örnek bir stored procedure yazalım. Çalışma alanı olarak pubs kataloğunu kullanalım. Örneğimiz de job_id si verilen job u kopyalayarak yeni bir job yapalım ve yeni job un id sini döndürelim. Reel hayatta bunu fatura kopyalama olarak düşünebilirsiniz.

Açıklamaları sql kodda vermeye çalıştım. Buyrunuz.

Stored Procedure:

/*Job2Job stored procedure ün adı*/
/*Job2Job sistemde varsa drop ediyoruz.*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job2Job]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Job2Job]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
/*Job2Job u create ediyoruz.*/
/*@JobID_Source - Kopyalamak istediğimiz job un id si*/
/*@JobID_Dest - Yeni oluşan job un id si. Bunu output ile alıyoruz.*/
CREATE Procedure dbo.Job2Job @JobID_Source int , @JobID_Dest int OUTPUT
/*with enc ile kodumuzu saklıyoruz.*/
/*artık kodumuz enterprise dan girilip bakılmaya çalışıldığında gözükmeyecektir*/
With Encryption
as set nocount on begin tran  
  /*insert işlemi*/
  insert jobs
    select job_desc,min_lvl,max_lvl from jobs where job_id=@JobID_Source
  /*insert ten sonra job kataloğunda ki en son numara yeni oluşan job un id sidir.*/
  set @JobID_Dest=IDENT_CURRENT('Jobs')
commit tran
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Kullanımı ise şu şekilde:

declare @JobID_Dest int
select @JobID_Dest=0
exec dbo.Job2Job 1,@JobID_Dest output
select @JobID_Dest

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan