Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
jothaz

Exemplo de WHERE dinâmico, Sem utilização de EXEC ou CASE

Question

Camaradas,

Exemplo de WHERE dinâmico - sem utilização de EXEC ou CASE

A stored procedure a seguir efetua uma consulta em uma tabela de CLIENTES utilizando como critério os

campos: UF, CIDADE e BAIRRO.

A particularidade desta stored procedure é que ele é capaz efetuar a consulta de maneira dinâmica.

Ou seja a stored procedure receberá:

  • 3 parâmetros

    EXEMPLO_WHERE_DINAMICO('UF','CIDADE','BAIRRO')

  • 2 parâmetros

    EXEMPLO_WHERE_DINAMICO('UF','CIDADE')

  • 1 parâmetro

    EXEMPLO_WHERE_DINAMICO('UF')

  • NENHUM parâmetro

    EXEMPLO_WHERE_DINAMICO()

E efetuará o filtro (WHERE) dinamicamente.

Segue código da stored procedure:

--
--- INICIO DA PROCEDURE ---------------------------------------------------------------------------------
--
CREATE PROC EXEMPLO_WHERE_DINAMICO(
    @UF          CHAR(2)  = NULL,
    @CIDADE      VARCHAR(30)  = NULL,
    @BAIRRO      VARCHAR(30)  = NULL
)
AS  

    SELECT  *
    FROM    CLIENTES
    WHERE
      -- FILTROS OPCIONAIS ----------------------------------------------------------------------------------------
            (@UF        IS NULL OR UFA        = @UF)        AND
            (@CIDADE    IS NULL OR CIDADE   = @CIDADE)     AND
            (@BAIRRO    IS NULL OR BAIRRO   = @BAIRRO)
    
    ORDER BY UF,CIDADE,BAIRRO

Considerações finais:

É sempre aconselhavel ser prudente no uso do OR pois normalmente afeta a performance.

Alguns DBA´s consideram até uma heresia o seu uso! :o)

Analise o plano de execução para avaliar como a expressão esta sendo processada. Por

ele é possivél perceber o gargalos na execução de sua expressão.

Fonte/Autor/link

AUTOR: "Jothaz" e "Bruno"

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148409
    • Total Posts
      643823
×
×
  • Create New...