none
Tratamento no select, ocorre erro com o if RRS feed

  • Pergunta

  • Bom dia,

    Tenho uma pagina e  faço o carregamento da minha GridView através de uma function, que me retorna todas as entradas de um determinado produto, sendo que é passado o id por queryString.

    Mais sendo assim, ela me lista "todas" entradas, ordenadas por data de emissão DESC.

    Fui orientado a fazer um check box que por default ele vem checkado, Caso ele esteja checkado,

    chkUltimosCemRegistros = 1, trazer apenas os 100 ultimos registros mais recentes "DESC".

    A duvida é um seguinte:

    Passei um novo parâmetro na fuction,

    Como faço para fazer um verificação no select por exemplo tentei fazer assim:

    DECLARE @isLimitarPesquisa BIT,
    if @isLimitarPesquisa = 0
    begin 
    select top(100)*
     from Cliente
        end 
    else 
    begin
    selecT * 
     from Cliente
    End

    where .,.........

    So que por alguns motivo o "if" fica como estivesse errado.

    Algum sabe como posso fazer para caso o parâmetro seja 1 executar um select caso seja 0 executar outro select,

    fiz de uma forma que era deixando tudo em uma variável como string e depois executava essa linha,deu certo mais por questão de desempenho não ficou legal  e por ser uma funtion e não procedure.

    Obrigado, 


    • Editado Ariel_1234 segunda-feira, 24 de fevereiro de 2014 13:51 Erro de DIgitação
    segunda-feira, 24 de fevereiro de 2014 13:48

Respostas

  • Ariel, qual o erro que esta retornando para voce ? tente fazer assim :

    DECLARE @isLimitarPesquisa BIT
    
     if @isLimitarPesquisa = 0
     begin 
     select top(100)*
      from Cliente
         end 
     if @isLimitarPesquisa <> 0
     begin
     selecT * 
      from Cliente
     End


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Ariel_1234 segunda-feira, 24 de fevereiro de 2014 15:04
    segunda-feira, 24 de fevereiro de 2014 14:17

Todas as Respostas

  • Ariel, qual o erro que esta retornando para voce ? tente fazer assim :

    DECLARE @isLimitarPesquisa BIT
    
     if @isLimitarPesquisa = 0
     begin 
     select top(100)*
      from Cliente
         end 
     if @isLimitarPesquisa <> 0
     begin
     selecT * 
      from Cliente
     End


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Ariel_1234 segunda-feira, 24 de fevereiro de 2014 15:04
    segunda-feira, 24 de fevereiro de 2014 14:17
  • Ariel,

    O conceito que você estruturou sua condição esta correto, porém você deve incluir à cláusula WHERE em cada consulta também. Veja um modelo abaixo:

    DECLARE @isLimitarPesquisa BIT,
    if @isLimitarPesquisa = 0
      BEGIN 
        select top(100) *
        from Cliente
    --    where ...
      END 
    else 
      BEGIN
        selecT * 
        from Cliente
    --  where...
      END

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 24 de fevereiro de 2014 14:33
    Moderador
  • Ariel,

    Fiz apenas um pequeno teste com essa parte de codigo que você passou, só retirando a parte do select e está funcionando normalmente.

    DECLARE @isLimitarPesquisa BIT
    SET @isLimitarPesquisa = 1
    if @isLimitarPesquisa = 0
    begin 
    PRINT 'Entrou no IF'
        end 
    else 
    begin
    PRINT 'Entrou no ELSE'
    End

    Qual mensagem de erro você está encontrando?

    Não seria melhor tratar isso na aplicação ao inves de uma function? Ou até mesmo usar uma procedure?


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    segunda-feira, 24 de fevereiro de 2014 15:02
  • Obrigado, dessa forma deu certo, sei que foi uma duvida básica, mais tive dificuldade. 

    Muito obrigado pela paciência e pela atenção.

    segunda-feira, 24 de fevereiro de 2014 15:07
  • Pessoal quando, coloco o else aparece dessa forma, 

    Erro:

    Mensagem 156, Nível 15, Estado 1, Linha 2
    Sintaxe incorreta próxima à palavra-chave 'if'.
    Mensagem 137, Nível 15, Estado 2, Linha 2
    É necessário declarar a variável escalar "@isLimitarPesquisa".
    Mensagem 156, Nível 15, Estado 1, Linha 8
    Sintaxe incorreta próxima à palavra-chave 'else'.

    Utilizei da forma que o "Alexandre Matayosi Conde Mauricio." sugeriu de usar 2 if e deu certo.

    Caso saiba o motivo do erro, e não for atrapalhar ficaria grato em saber o motivo do mesmo

    Obrigado pela atenção e paciencia.

    segunda-feira, 24 de fevereiro de 2014 15:17
  • Ariel, pode postar a query que voce esta tentando executar ?

    Alexandre Matayosi Conde Mauricio.

    segunda-feira, 24 de fevereiro de 2014 15:20
  • Então até pensei, em utilizar uma Proc, mais por força maior (Chefe) não foi autorizado.

    Por motivo que desconheço, apenas disse que em ganharia em desempenho, pela quantidade de registro um function seria melhor.

    Obrigado, 

    Grato.

    segunda-feira, 24 de fevereiro de 2014 15:24