SQL PROCEDURE MACERASI -9

Buraya kadar her şey belli bir standart çerçevesinde gelişti, parametrik değişken geldi şartı sağlıyorsa X işlemi sağlamıyorsa Y işlemi gerçekleştirildi.

 

Ama biz bu kadar uzun sorgu cümleleri ile uğraşmak yerine DİNAMİK sorgular üzerinde çalışmış olsaydık bu sefer de PROSEDÜRLERİMİZİ kısaltabilecektik.

 

Ama Nasıl?

 

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

— =============================================

— Author:        Burak SEKERCIOGLU

— Create date: 12/05/2011

— Description:   SP TEST-9

— =============================================

 

CREATE PROCEDURE [dbo].[sp_TEST] (@tip int,@tip2 int)

 

AS

declare @sorgu nvarchar(max)

declare @odaca nvarchar(50)

declare @terkin nvarchar(50)

declare @sqlsorgu nvarchar(max)

declare @sor nvarchar(max)

declare @sor2 nvarchar(max)

declare @sqlsorgu2 nvarchar(max)

declare @sorgu2 nvarchar(max)

BEGIN

 

 

SET NOCOUNT ON;

 

 

if @tip=1

begin

set @sorgu='(indx.sanayi = 1)’

set @sqlsorgu=convert(nvarchar(max),@sorgu)

end

 

if @tip=2

begin

set @sorgu='(indx.ithalat = 1)’

set @sqlsorgu=convert(nvarchar(max),@sorgu)

end

 

if @tip=3

begin

set @sorgu='(indx.ihracat = 1)’

set @sqlsorgu=convert(nvarchar(max),@sorgu)

end

 

if @tip2=1

begin

set @sorgu2='(indx.sanayi = 1)’

set @sqlsorgu2=convert(nvarchar(max),@sorgu2)

end

 

if @tip2=2

begin

set @sorgu2='(indx.ithalat = 1)’

set @sqlsorgu2=convert(nvarchar(max),@sorgu2)

end

 

if @tip2=3

begin

set @sorgu2='(indx.ihracat = 1)’

set @sqlsorgu2=convert(nvarchar(max),@sorgu2)

end

 

 

set @odaca=’TASFİYE’

set @terkin=’TERK’

 

set @sor=’ and (durumtanimi<>@odaca) and (durumtanimi<>@terkin) ORDER BY kurum.grupkodu’

set @sor2=convert(nvarchar(max),@sor)

 

set @sorgu=’ SELECT     TOP (100) PERCENT  kurum.web, kurum.eposta, kurum.unvan, kurum.sicil, kurum.grupkodu,kurum.durum, kurum_indx.istihdam, kurum_indx.mark,kurum_indx.urun,sektor.sektor,kurum_indx.adres FROM         indx LEFT OUTER JOIN sektor ON indx.sektor = sektor.id RIGHT OUTER JOIN kurum ON indx.kno = kurum.kno WHERE’

if @tip is not null and @tip is null

begin

set @sorgu=@sorgu+  @sqlsorgu + @sor2

end

 

if @tip is not null and @tip is not null

begin

set @sorgu=@sorgu+  @sqlsorgu + ‘ OR ‘ + @sqlsorgu2 + @sor2

end

 

exec(@sorgu)

END

 

 

Yukarıdaki kodlardan da görebileceğiniz gibi her seferinde sorgumuzu uzun uzun yazmak yerine durumlara bağlı olarak @sorgu ve @sorgu2 ye değer atadık ve bu değerleri de @sqlsorgu ve @sqlsorgu2 değişkenlerine nvarchar(max) yaparak atadık.

 

Sonrasında ise @sorgu değişkeninde cümle yapılarını değişken şartlarına göre birleştirerek

exec(@sorgu)

ile çalıştırılmasını sağladık.

 

İşte böyle… Elimden geldiğince sizlere STORED PROCEDURE macerasında rehber olabilecek örnek yapıları anlatmaya çalıştım.

 

Bu konuda önemli olan şey, hayal gücünüzün sınırlarını genişletmek ve hayal gücünüz genişlerken de komut kombinasyonlarını korkmadan kullanabilmektir.

 

Loading