Ir para conteúdo

Arquivado

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

MarKteus

Where 1 = 1 no stringbuilder

Recommended Posts

Olá

Em meio aos meus estudos encontrei o trecho abaixo:

 

 

StringBuilder sqlString = new StringBuilder();
sqlString.AppendLine("select * from usuarios");

 

if (pessoa != null)
{
sqlString.AppendLine("Where 1 = 1");
if (pessoa.Id > 0)
{
sqlString.AppendLine("and id_pessoa = " + pessoa.Id + "");
}
Pra que raios serve o "1 = 1" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para não causar uma exeção no codigo, imagina se não tivese o 1 = 1, ele ia compilar assim select * from usuarios where and id_pessoa = 10, sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tá mas não poderia ser


StringBuilder sqlString = new StringBuilder();

if (pessoa != null)

{

sqlString.AppendLine("select * from usuarios Where ");

if (pessoa.Id > 0)

{

sqlString.AppendLine("id_pessoa = " + pessoa.Id + "");

}

ou

StringBuilder sqlString = new StringBuilder();

if (pessoa != null)

{

if (pessoa.Id > 0)

{

sqlString.AppendLine("select * from usuarios Where id_pessoa = " + pessoa.Id + "");

}


??

Compartilhar este post


Link para o post
Compartilhar em outros sites

As duas opções de if causaria uma exceção tsql caso o id seja zero.

Da forma como vc citou inicialmente não causaria, pois a striing tsql sempre esta correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só causaria se não houver outro tratamento na estrutura dos IF´s, partindo da premissa que:
Select * from tabela Where 1 = 1 e
Select * from tabela fazem a mesma coisa.

 

StringBuilder sqlString = new StringBuilder();

if (pessoa != null)
{
if (pessoa.Id > 0)
{
sqlString.AppendLine("select * from usuarios Where id_pessoa = " + pessoa.Id + "");
} else {
sqlString.AppendLine("select * from usuarios");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta ultima tratativa é válida, mas você concorda que escreveu mais linhas do que o primeiro exemplo? É uma questão de escrever menos para fazer a mesma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É como khaos disse.

Mas como te falei inicialmente, a premissa do código inicial é tornar sua query dinâmica. E caso tenha parametros ele filtra se não ele tras tudo veja meu exemplo:

string sql =
                "SELECT * FROM vw_Get_Empresas_Representantes WHERE 1 = 1 ";


            if (!string.IsNullOrWhiteSpace(codSocio))
            {
                sql += " AND CodSocio = " + codSocio;


            }
            if (!string.IsNullOrWhiteSpace(nomeEmpresa))
            {
                sql += " AND Guerra LIKE '%" + nomeEmpresa + "%'";
            }
            if (!string.IsNullOrWhiteSpace(socio) && socio != "-1")
            {
                var s = socio == "1" ? 1 : 0;
                sql += " AND Socio = " + s;
            }
            if (!string.IsNullOrWhiteSpace(nome))
            {
                sql += " AND Representante LIKE '%" + nome + "%'";
            }


            sql += " ORDER BY Nome;";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse "Where 1 = 1" quando vi achei que ele fizesse algo que eu ainda desconhecia, (algum ganho de performance talvez), algo inovador por isso perguntei.

 

pelo seu exemplo, caso nenhum IF seja satisfeito um erro é evitado, mas caso nenhum IF for satisfeito não seria mais indicado nem ir no Banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, no meu caso, o uso dos if são para:

ao entrar na pagina eu trago todos os registro pro usuário, e disponho pra ele um formulário caso ele queira refinar os resultados.

Entendeu a lógica?

Por exemplo aqui mesmo no fórum, ao abrir o fórum ele trás tudo, dai se vc filtrar por um tópico, categoria, ele vai aplicando o filtro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade o 1=1 não ganha performance, pelo contrário, mas a perda é muito pequena se comparado ao esforço de ter que escrever varias linhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FabianoSouza
      Preciso corrigir o erro "Somente uma expressão pode ser especificada na lista de seleção quando a subconsulta não é introduzida com EXISTS." da minha consulta.
      SELECT TA.titulo AS 'Trilha' , (SELECT CAST(ROUND((Comportamental * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Comportamental ,CAST(ROUND((Técnico * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Técnico FROM ( SELECT SUM(CASE WHEN dbo.tabB.enfoque = '1' THEN 1 ELSE 0 END) AS Comportamental, SUM(CASE WHEN dbo.tabB.enfoque = '2' THEN 1 ELSE 0 END) AS Técnico, COUNT(*) AS Total FROM dbo.tabB ) tab ) FROM dbo.tabA AS TA Nessa consulta, preciso trazer o título (da tabA) e o resultado de um cálculo feito na subconsulta, nos campos Comportamental e Técnico.
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • Por Rafael Massula
      Boa noite pessoal, 
      Tenho o seguinte código em .Net que faz a comparação de uma senha que foi criptografada e salva no banco com a senha comum que o usuário conhece. O algoritmo que desenvolvi foi esse da image.png porem preciso converter essa verificação para JavaScript pela seguinte necessidade, será uma aplicação em electron e ela poderá funcionar offline então não terei como mandar a verificação para o servidor. Existe alguma possibilidade? Desde já agradeço. 

×

Informação importante

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