(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:
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.
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
Curtir tópico
+ 0
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
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)