Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarKteus

O que faz esse WHERE com CASE ?

Recommended Posts

Não consigo entender o Where com Case abaixo:

 

where

1 = case

when @idCarro is null then 1

when @idCarro is not null and idCarro = @idCarro then 1

else 0

 

Do que se trata o 1 = , como se deve ler isso

 

Alguém manja e pode traduzir ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

MarKteus,

 

Esse where vai retornar ou 0 ou 1, ou seja, no final do processamento fica

"where 1=1"

ou

"where 1=0"

Portanto, dependendo do valor da váriavel a consulta é modificada.

 

Indo mais a fundo:

 

Se a váriavel @idCarro for vazia então mostra todos os resultados porque a consulta ficará "where 1=1";

Se o idCarro na tabela for igual ao valor @idCarro da váriavel então mostra todos os resultados porque a consulta ficará "where 1=1";

Senão, não mostra nenhum (where 1=0)

 

Abcs

 

Não consigo entender o Where com Case abaixo:

 

where

1 = case

when @idCarro is null then 1

when @idCarro is not null and idCarro = @idCarro then 1

else 0

 

Do que se trata o 1 = , como se deve ler isso

 

Alguém manja e pode traduzir ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então devo entender que se no WHERE ficar 1 = 1 é como se nenhuma condição fosse passada e o que faria a query funcionar como se fosse escrita assim: "SELECT * FROM TB_CARROS" ao invés de "SELECT * FROM TB_CARROS WHERE COR='VERMELHA'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, você pode pensar dessa maneira.

 

Então devo entender que se no WHERE ficar 1 = 1 é como se nenhuma condição fosse passada e o que faria a query funcionar como se fosse escrita assim: "SELECT * FROM TB_CARROS" ao invés de "SELECT * FROM TB_CARROS WHERE COR='VERMELHA'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia ser isto.

 

... where nvl(@idCarro,idCarro ) = idCarro ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal ...

 

Sempre achei que era igual.

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia ser isto.

 

... where nvl(@idCarro,idCarro ) = idCarro ...

 

Na versão 2005 já funciona desse jeito ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia ser isto.

 

... where nvl(@idCarro,idCarro ) = idCarro ...

 

Na versão 2005 já funciona desse jeito ?

 

deste não, mas o do post #6 sim!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew gente

 

Vou aproveitar o post e perguntar outra coisa.

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

O erro acima aparece porque BOF ou EOF são True como faço para não acontecer esse pois ele acontece juntamente quando estou utilizando

 

IF not rsQueryCar.eof then

laralra

end if

 

Quando o recordset vem com mais de 1 registros ou sem nenhum registro erro não acontece. Quando o recordset retorna apenas 1 registro dá esse pau aí. O que pode ser feito ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew gente

 

Vou aproveitar o post e perguntar outra coisa.

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

isso não é sql server, isso ta com cara de vb ou asp, por favor, postar cada assunto em determinada área

 

mas acho que se você testar a propriedade recordcount pode funcionar

IF rsQueryCar.recordcount > 0 then
laralra
end if

mas se isso não resolver por favor abrir um tópico na área correta, vb ou asp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew gente

 

Vou aproveitar o post e perguntar outra coisa.

 

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

 

isso não é sql server, isso ta com cara de vb ou asp, por favor, postar cada assunto em determinada área

 

mas acho que se você testar a propriedade recordcount pode funcionar

IF rsQueryCar.recordcount > 0 then
laralra
end if

mas se isso não resolver por favor abrir um tópico na área correta, vb ou asp

 

 

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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