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.
Pergunta
jothaz
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
- 2 parâmetros
- 1 parâmetro
- NENHUM parâmetro
E efetuará o filtro (WHERE) dinamicamente.EXEMPLO_WHERE_DINAMICO('UF','CIDADE','BAIRRO')
EXEMPLO_WHERE_DINAMICO('UF','CIDADE')
EXEMPLO_WHERE_DINAMICO('UF')
EXEMPLO_WHERE_DINAMICO()
Segue código da stored procedure:
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.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.