Vamos con una cuestión que seguro que nos hemos encontrado más de una vez: Tenemos un campo en una base de datos donde almacenamos un valor verdadero o falso y tenemos que realizar un Update para cambiar dicho estado. ¿Cómo hacemos para modificarlo con el menor costo posible? Te doy un par de soluciones, todas válidas para SQL-Server desde la versión 2008 hasta la 2017 (y supongo que seguirán valiendo en las posteriores):
Para la primera vamos a usar la operación del OR exclusivo bit a bit:
Update TablaEjemplo SET ValorVF = Convert(Bit,ValorVF ^ 1)
Otra opción lógica es usar el operador lógico de negación para invertir el valor:
Update TablaEjemplo SET ValorVF = Convert(Bit,~ ValorVF)
¿Y qué pasa si la tabla no está bien diseñada y en lugar de almacenar un valor bit estamos almacenando un entero? Si no podemos cambiar el diseño de la tabla todavía podemos recurrir a la primera solución, el OR exclusivo bit a bit, pero sin realizar la conversión a tipo bit:
Update TablaEjemplo SET ValorVF = ValorVF ^ 1
Y además tenemos otra opción, con una simple resta y con la función ABS(), que nos devuelve el valor absoluto del parámetro que recibe:
Update TablaEjemplo SET ValorVF = ABS(ValorVF - 1)