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 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?
    • By Boca
      Pessoal preciso fazer uma consulta simples mas não estou obtendo resultado, tenho a seguinte tabela
      --------------- | ID | TID | --------------- | 56 | 2 | --------------- | 58 | 2 | --------------- | 25 | 8 | --------------- | 25 | 2 | --------------- | 12 | 9 | --------------- | 18 | 2 | --------------- | 45 | 10 | --------------- | 35 | 2 | --------------- | 18 | 8 | ---------------
      Minha consulta
      SELECT ID FROM table WHERE TID = 2 and TID = 8 GROUP BY ID

      resultado esperado
      25 e 18
       
×

Important Information

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