Store Procedure T-SQL ile arama

Dinamik arama sorgularında t-sql kullanmak işimizi kolaylaştıracaktır. T-sql kullanmaktaki amaç where kıstaslarının dinamik olarak eklemektir. Fikir edinmeniz için, kullandığım bir t-sql arama sorgusu aşağıdadır. Entity framework ile kullanıldığında sadece sorgulamak istediğim değişkenlere değerlerini göndermem yeterli oluyor.

USE [DatabaseEx]
GO
/****** Object:  StoredProcedure [dbo].[sp_UyeArama]    Script Date: 02/12/2013 11:36:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Cem ELMA
-- Create date: 07.02.2013
-- Description:	Üyeler tablosunda arama
-- =============================================
ALTER PROCEDURE [dbo].[sp_UyeArama]
@unvan nvarchar(255)=null,
@sicilno nvarchar(20)=null,
@sehir nvarchar(3)=null,
@ilce nvarchar(2)=null,
@semt nvarchar(2)=null,
@meslekkomitekod nvarchar(5)=null,
@isciaralik int=null,
@sermayearalik int=null,
@ortaklik nvarchar(500)=null,
@kayiticindeara nvarchar(255) = null,
@siralamatipi int=null
AS
BEGIN
    SET NOCOUNT ON;
    --Sorgu Tanımlamalar
    Declare @SQLQuery AS NVarchar(4000)

    --Dinamik sorguyu oluşturur
    Set @SQLQuery = 'SELECT * from Table1 WHERE (1=1) ' 
    if @kayiticindeara Is Null
    begin

    if @unvan Is Not Null Set @SQLQuery = @SQLQuery + ' And LOWER(SBFRMUNV) LIKE ''%' + @unvan + '%'''		
    if @sicilno Is Not Null Set @SQLQuery = @SQLQuery + ' And SBSCLKOD LIKE ''%' + @sicilno + '%'''		
    if @sehir Is Not Null Set @SQLQuery = @SQLQuery + ' And SBILKODU LIKE ''%' + @sehir + '%'''
    if @ilce Is Not Null Set @SQLQuery = @SQLQuery + ' And SBILCEKD LIKE ''%' + @ilce + '%'''	
    if @semt Is Not Null Set @SQLQuery = @SQLQuery + ' And SBSEMTKD LIKE ''%' + @semt + '%'''	
    if @meslekkomitekod Is Not Null Set @SQLQuery = @SQLQuery + ' And SBMESKOMKOD = @meslekkomitekod' --Grup
    if @isciaralik Is Not Null
	begin
            SET @SQLQuery = CASE
            WHEN @isciaralik = 25 THEN @SQLQuery + ' And (SBISCSYS >= 5 AND SBISCSYS < 26)'
            WHEN @isciaralik = 50 THEN @SQLQuery + ' And (SBISCSYS >= 26 AND SBISCSYS < 50)'
            WHEN @isciaralik = 200 THEN @SQLQuery + ' And (SBISCSYS >= 50 AND SBISCSYS < 200)'
            WHEN @isciaralik = 201 THEN @SQLQuery + ' And (SBISCSYS >= 200)'
            END
	end
    if @sermayearalik Is Not Null
	begin	
	    SET @SQLQuery = CASE
            WHEN @sermayearalik = 1 THEN @SQLQuery + ' And (SNSRMYTO >= 1000000)'
            WHEN @sermayearalik = 2 THEN @SQLQuery + ' And (SNSRMYTO >= 250000 AND SNSRMYTO < 1000000)'
            WHEN @sermayearalik = 3 THEN @SQLQuery + ' And (SNSRMYTO >= 100000 AND SNSRMYTO < 250000)'
            WHEN @sermayearalik = 4 THEN @SQLQuery + ' And (SNSRMYTO >= 25000 AND SNSRMYTO < 100000)'
            WHEN @sermayearalik = 5 THEN @SQLQuery + ' And (SNSRMYTO >= 5000 AND SNSRMYTO < 25000)'
            WHEN @sermayearalik = 6 THEN @SQLQuery + ' And (SNSRMYTO >= 1 AND SNSRMYTO < 5000)'
            END  
	end
    if @ortaklik Is Not Null Set @SQLQuery = @SQLQuery + ' And LOWER(SBORTAKL) LIKE ''%' + @ortaklik + '%'''		

    end
    else 
    begin
	Set @SQLQuery = @SQLQuery + ' and (LOWER(SBFRMUNV) LIKE ''%' + @kayiticindeara + '%'' 
	    or SBSCLKOD LIKE ''%' + @kayiticindeara + '%''
	    or SBTELEF1 LIKE ''%' + @kayiticindeara + '%''
	    or SBNACEKD LIKE ''%' + @kayiticindeara + '%''
	    or SBTICSCL LIKE ''%' + @kayiticindeara + '%'') '	
    end
    --Sorgu Sıralamasını ekler
    if (@siralamatipi=1) Set @SQLQuery = @SQLQuery + ' Order By SBFRMUNV'
	else Set @SQLQuery = @SQLQuery + ' Order By SBFRMUNV desc'

	--sorguyu çalıştırır
	EXECUTE sp_executesql @SQLQuery
END

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s