Jump to content
FabianoSouza

Escolher coluna em cláusula WHERE

Recommended Posts

Quero fazer um select que me permita escolher em qual coluna a pesquisa deverá ocorrer.

Na minha cabeça a coisa deveria ser com essa lógica:

 

DECLARE 
@strPesquisa varchar(60)
, @colunaPesquisa varchar(60)

 

SET @colunaPesquisa = 'nome'
SET @strPesquisa = 'Al Pacino'

 

SELECT * FROM minhaTabela WHERE
@colunaPesquisa LIKE '%'+ @strPesquisa +'%'

 

Claro que essa sintaxe não funciona. Mas a lógica seria essa.

 

Com crio isso?

 

Grato.

Share this post


Link to post
Share on other sites

Cara, isso me ajudou bastante. Agradeço bastante.

Pelo que entendi, para atingir meu  objetivo terei que montar meu SELECT basicamente fazendo concatenações (colocando tudo dentro de uma variável para depois executar com uma query propriamente dito). Essa "técnica" deixa a programação uma salada (pois minha consulta é grande), mas vai funcionar.


Mas não conseguir fazer funcionar usando VIEW (como no exemplo do link).


 

******* isso funciona
set @view = 'dbo.minhaTab'
set @coluna = 'nome'
set @variavel = 'Leo'

SET @sql = 'select nome from ' + @view + ' where ' + @coluna + ' LIKE ' + '''%'+@variavel+'%''' 
EXEC (@sql)

******** isso não funciona (chamando uma view, ao invés de tabela)
set @view = 'dbo.minhaView'
set @coluna = 'nome'
set @variavel = 'Leo'

SET @sql = 'select nome from ' + @view + ' where ' + @coluna + ' LIKE ' + '''%'+@variavel+'%''' 
EXEC (@sql)

Usando a função PRINT aparece:

select * from dbo.view_selMailing where nome LIKE '%Leo%'

 

Diante disso penso que o certo seria:
1) Recuperar o resultado na view (a consulta "bruta").

2) Colocar esse resultado numa tabela temporária
3) Executar a consulta dinâmica com base na tabela temporária.

Acha uma boa abordagem? Acha que a performance pode ficar muito ruim?
Tenho cera de 10K registros.

 

Grato.

 

 

 

 

Share this post


Link to post
Share on other sites

Não creio precisar de views , bastaria montar os slqs dinâmicos.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By SAS Junior
      Olá, sou novo aqui e em SQL Server, estou com um problema para buscar um resultado. 
      Caso hoje seja segunda, trazer as instalações dos últimos 3 dias (sexta, sábado e domingo), caso não seja, trazer só os de ontem, tentei da forma abaixo e muitas outras e não consegui, desde já agradeço.    
      SELECT codigoCliente AS [CÓD], CpfCnpj AS [CPF/CNPJ] ,NomeFantasia as [NOME FANTASIA] ,UPPER(NomeContato) as [NOME DE CONTATO] ,CASE WHEN CLI.DDDCelular IS NULL THEN 'NÃO TEM' ELSE DDDCelular END AS [DDD CEL] ,CASE WHEN Celular IS NULL THEN 'NÃO TEM' ELSE Celular END AS CELULAR ,CASE WHEN DDDTelefone IS NULL THEN 'NÃO TEM' ELSE DDDTelefone END AS [DDD TEL] ,CASE WHEN Telefone IS NULL THEN 'NÃO TEM' ELSE Telefone END AS TELEFONE ,DataInstalacao AS [INSTALAÇÃO] ,DATEPART(weekday,DataInstalacao) as [DIASEMANA] ,UPPER(Departamento) AS [DEPTO CAD] ,upper(UsuarioCadastro) as [CADASTRADO POR] ,CASE WHEN UPPER(EMAIL) IS NULL THEN 'NÃO TEM EMAIL' ELSE UPPER(EMAIL) END AS EMAIL FROM CLIENTE WHERE (CASE WHEN (DATEPART(weekday,GETDATE()) = '2' THEN DATEPART(DAY, DataInstalacao) >= DATEPART(DAY, GETDATE()-3) ELSE DATEPART(DAY, DataInstalacao) = DATEPART(DAY, GETDATE()-1) END) AND MONTH(DataInstalacao) = MONTH(GETDATE()) AND YEAR(DataInstalacao) = YEAR(GETDATE()) AND Situacao = 'MAQUINA INSTALADA'  
    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By GGM
      Pessoal, é o seguinte.. Tenho a seguinte query, que está funcionando perfeitamente:
       
      SELECT (SELECT SUM(`quantidade_erros`) FROM erro WHERE `fk_id_questionario` = 1 AND `fk_id_turma` = 1) AS alfabeto, (SELECT SUM(`quantidade_erros`) FROM erro WHERE `fk_id_questionario` = 5 AND `fk_id_turma` = 1) AS cores FROM erro WHERE `fk_id_turma` = 1 GROUP BY `fk_id_turma`  

       
      O que acontece é que eu não terei controle sobre os registros contidos na coluna fk_id_questionario, desta forma não sei como proceder para fazer a comparação `fk_id_questionario` = "valorQuePossaEstarContidoNessaColuna".
       
      Alguma dica?
    • By GGM
      Pessoal, é o seguinte.. Tenho a seguinte query, que está funcionando perfeitamente:
       
      SELECT (SELECT SUM(`quantidade_erros`) FROM erro WHERE `fk_id_questionario` = 1 AND `fk_id_turma` = 1) AS alfabeto,
      (SELECT SUM(`quantidade_erros`) FROM erro WHERE `fk_id_questionario` = 5 AND `fk_id_turma` = 1) AS cores FROM erro WHERE
      `fk_id_turma` = 1 GROUP BY `fk_id_turma`
       

       
      O que acontece é que eu não terei controle sobre os registros contidos na coluna fk_id_questionario, desta forma não sei como proceder para fazer a comparação `fk_id_questionario` = "valorQuePossaEstarContidoNessaColuna".
       
      Alguma dica?
    • By wesleycsilva
      Tem uma tabela que relaciona os produtos de uma determinada compra, onde preciso consultar diversos produtos e retornar os ids das compras que tenham todos os produtos que consultei, em uma estrutura parecida com o exemplo abaixo:
       
      SELECT  * FROM  produtos_has_compras WHERE (idProduto = 6 AND idProduto = 77 AND idProduto = 11) GROUP BY idCompra;
       
      Alguém teria uma solução que possa me ajudar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.