edipoRei Postado Setembro 26, 2010 Denunciar Share Postado Setembro 26, 2010 Ola,Estou utilizando asp e o sql server.Tenho uma página com uma tabela e estou tentando fazer um filtro.O filtro consistirá de duas tags <select> que representam duas colunas da minha tabela.Ao escolher determinado valor dos selects, a tabela deverá mostrar apenas os valores correspondentes.o seguinte código: <select id="nome"> <option value="0">TODAS</option> <option value="1">A</option> <option value="2">B</option> </select> <select id="endereco"> <option value="0">TODAS</option> <option value="1">C</option> <option value="2">D</option> </select>A minha duvida é como tratar essas variáveis na procedure...Por exemplo se eu selecionar no select nome a oção "A" e no select endereco selecionar a opção Cna procedure basta fazer:select * from tbl where nome=@nome and endereco=@enderecoO problema é quando escolha a opção TODAS...Se enviar este valor para a prc ele irá parar na clausula where fazendo não retornar valor algum...O que faço?Testo os valores das variáveis e faço quatro selects?EX:select * from tbl;select * from tbl where nome=@nome and endereco=@endereco;select * from tbl where nome=@nome;select * from tbl where endereco=@enderecoNão gostaria de fazer isso , pois posteriormente posso ter que aumentar a quantidade de selectsow a estrutura da tabela...Teria uma outra maneira???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Setembro 27, 2010 Denunciar Share Postado Setembro 27, 2010 Boa tarde Edipo, você pode criar uma variável do tipo string, testar os valores das variáveis atribuindo a cláusula que desejar, e depois concatenar sua string com o select. Assim você montará seu select de acordo com a navegação do usuário. Se eu fosse fazer, preferiria fazer um select para cada cláusula. Fica maior, mas o código fica mais legível. Não é uma boa prática de programação criar string e depois realizar concatenações em selects. Mas caso não tenha jeito... rs. É uma opção válida!!! :.) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 edipoRei Postado Setembro 29, 2010 Autor Denunciar Share Postado Setembro 29, 2010 consegui! fiz algo como:select * from tbl where (nome=@nome or @nome='TODAS') and (endereco=@endereco or @endereco='TODAS') ;comando retirado de um site Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Setembro 29, 2010 Denunciar Share Postado Setembro 29, 2010 Bom dia Edipo, Uma dica: Ao utilizar a cláusula OR, você onera significativamente a performance do Banco. Fazendo pesquisa em string, ficará ainda pior. Se sua tabela tiver muita concorrência e/ou muitos registros, provavelmente terá problemas de performance. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 edipoRei Postado Outubro 12, 2010 Autor Denunciar Share Postado Outubro 12, 2010 compreendo, irei fazer com os vários selects.obrigado a todos Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
edipoRei
Ola,
Estou utilizando asp e o sql server.
Tenho uma página com uma tabela e estou tentando fazer um filtro.
O filtro consistirá de duas tags <select> que representam duas colunas da minha tabela.
Ao escolher determinado valor dos selects, a tabela deverá mostrar apenas os valores correspondentes.
o seguinte código:
<select id="nome">
<option value="0">TODAS</option>
<option value="1">A</option>
<option value="2">B</option>
</select>
<select id="endereco">
<option value="0">TODAS</option>
<option value="1">C</option>
<option value="2">D</option>
</select>
A minha duvida é como tratar essas variáveis na procedure...
Por exemplo se eu selecionar no select nome a oção "A" e no select endereco selecionar a opção C
na procedure basta fazer:
select * from tbl where nome=@nome and endereco=@endereco
O problema é quando escolha a opção TODAS...
Se enviar este valor para a prc ele irá parar na clausula where fazendo não retornar valor algum...
O que faço?
Testo os valores das variáveis e faço quatro selects?
EX:
select * from tbl;
select * from tbl where nome=@nome and endereco=@endereco;
select * from tbl where nome=@nome;
select * from tbl where endereco=@endereco
Não gostaria de fazer isso , pois posteriormente posso ter que aumentar a quantidade de selects
ow a estrutura da tabela...
Teria uma outra maneira????
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.