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.