Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Carregando comentários...