Ir para conteúdo
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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por osmarindy
      Boa noite Pessoal.
      Estou com o seguinte problema. Tenho duas tabelas principais "tblProjeto" e "tblItensProjeto", tenho que selecionar o projeto (tblProjeto) cujo o item 19 (tblItensProjeto) já esteja concluído (status 5) e que o item 15 (tblItensProjeto) não esteja concluído (status 5) e nem cancelado (status 4).
      Tenho o seguinte código:
      SELECT p.nmProjeto, l.nmLocalidade, f.usuario, r.nmRequisitante, p.dtSolicitacao,p.dtPrevisaoEntrega, s.nmStatus FROM tblProjeto as p inner join tblItensProjeto as i on i.idProjeto = p.idProjeto inner join tblLocalidade as l on l.idLocalidade = p.idLocalidade inner join tblFuncionario as f on f.idFuncionario = p.idFuncionario inner join tblRequisitante as r on r.idRequisitante = p.idRequisitante inner join tblStatusProj as s on s.idStatus = i.idStatus where (i.idAtividade = 19 and i.idStatus= 5 ) and (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4))
      Se executo um  filtro de cada vez (where i.idAtividade = 19 and i.idStatus= 5 ) ou (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4)) eles trazem resultados, mas quando deixo os dois filtros não funciona.
      Possuo 5 projetos que estão com a atividade 19 concluída e atividade 15 pendente. mas, não consigo com esse select trazer a informação. Alguém sabe como posso resolver?
    • Por 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'  
    • Por 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';  
    • Por 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?
    • Por 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?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.