Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Mais um truque com SQL

Há situações em que você deseja atualizar os registros de uma tabela mediante o uso de uma instrução UPDATE que filtre apenas os registros que satisfazem determinada condição. Isto é fácil de fazer usando-se a cláusula WHERE. Porém, há casos em que o filtro que você precisa não deve atuar apenas a nível de registro, mas o que você precisa é, num mesmo registro selecionado, atualizar alguns campos e outros apenas quando satisfizerem a determinada condição. Veja o caso de alguém que precisa atualizar uma massa de registros onde o campo QuantidadeTotal deve ser aumentado em 2 para todos os registros e o campo QuantidadeParcial deve ser aumentado em 2 somente se o campo IdProduto for igual a 1000. Se você tentar fazer isto usando a cláusula Where para restringir os registros àqueles onde o IdProduto seja igual a 1000, você deixará de atualizar os campos QuantidadeTotal dos registros que não sejam do produto 1000. Não é isto o que você quer aqui. A solução é usar um pequeno truque. Todos sabemos que, no Access, uma expressão booleana pode retornar 0 ou -1. Podemos jogar com este fato para criar uma consulta que atualiza o campo QuantidadeParcial somente se o valor que se quer acrescentar ao campo se mantiver igual após ser multiplicado pela condição que o registro deve satisfazer para ter o campo atualizado. Isto é feito da seguinte forma:

UPDATE Lancamentos Set QuantidadeTotal = QuantidadeTotal + 2, QuantidadeParcial = QuantidadeParcial + (2 * (IdProduto = 1000) * -1)

Na consulta acima, todos os registros terão o campo QuantidadeTotal atualizado. Mas veja que você estará adicionando 0 a QuantidadeParcial sempre que a expressão (IdProduto = 1000) retornar 0 (False), pois o produto 2 * 0 * -1 é igual a 0. Adicionar 0 é o mesmo que não atualizar. Porém, se a expressão (IdProduto = 1000) retornar -1 (True), o produto 2 * - 1 *  -1 é igual a 2, ou seja, o valor que se quer adicionar nestes casos ao campo QuantidadeParcial.