(SQL SERVER) IF ou CASE alterando o WHERE de uma consulta.

24/07/2017

0

Boa tarde a todos.

Estou em busca de uma solução, mas não encontrei nada sobre o assunto. Não sei exatamente o quão programável é uma instrução em SQL, mas minha dúvida é a seguinte.

Tenho uma consulta que permite o usuário inserir definir os parâmetros através de algumas variáveis.
O ponto é que necessito que a consulta seja filtrada através de variáveis. Esta instrução será lida por outro programa que executará a consulta, mas não me permite programar a consulta conforme o uso, desta forma, toda minha programação está restrita ao SQL.

Pela consulta ser muito extensa, uma forma simplificado do problema seria assim:

DECLARE @variavel as INT;
SET @variavel = NULL --o programa vai atribuir aqui somente parâmetros para a consulta

SELECT * FROM TABELA WHERE ID IS NOT NULL
IF @variavel IS NOT NULL
BEGIN
AND VARIAVEL = @variavel
END


Eu quero executar um WHERE somente quando a variável tiver um valor atribuído a ele. Em caso de NULL ele não deve buscar por valores nulos, ele não deve executar a expressão.

Tentei contornar o problema fazendo um "AND VARIAVEL LIKE '%'+@variavel+'%', mas minha consulta passou de 20 seg para quase 5 min.

Teria alguma outra maneira de fazer isto?

Obrigado a todos.
Alan Luna

Alan Luna

Responder

Post mais votado

24/07/2017

Alan, para você fazer isso que você quer, tem que usar SQL Dinamico.
Você vai criar uma variável que vai receber sua string SQL.

Nesse site tem um exemplo bem simples de como fazer

Execute Dynamic SQL commands in SQL Server

Espero ter conseguido te ajudar

Grande abraço

Luiz Santos

Luiz Santos
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar