2015-06-19 4 views
14

Come aggiornare una colonna di tabella per ripristinare il suo valore (impostare true se value è false e false per true! Null rimane null).Come annullare un valore di una colonna di bit in SQL

Si prega di escludere soluzioni in cui si usa case when o IIF() voglio qualcosa come seguire

UPDATE mytable SET IsEditable = !IsEditable 

risposta

23

È possibile utilizzare bitwise NOT operator:

update mytable set IsEditable = ~IsEditable 
+0

Grazie, funziona ed è più veloce! – Bellash

+0

Bene veloce quanto il bitwise o. :-D – Ionic

13

Basta usare questo:

UPDATE mytable SET IsEditable=IsEditable^1 

Se si desidera verificare che:

SELECT CONVERT(bit,0)^1, CONVERT(bit,1)^1 
+0

Questo è buono ma la cosa è più lenta dato che usa bit 'xor'! comunque, ho votato – Bellash

+0

Beh, l'ho provato con 1.000.000.000 di righe in un test veloce. Entrambi producono lo stesso tempo e consumano la stessa CPU ('STATISTICS TIME ON'). Beh, non pensare che ci sia una vera differenza. :-) – Ionic

+0

scusa! non ha testato ma come per definizione 'C = A^B = (A & (~ B)) | (B & (~ A))' che sembra più lento di 'C = ~ C' ma penso da' xor'ing a 'B' e' B' sono uguali a '1' non ci sono problemi di velocità. Grazie @Ionic – Bellash

4

Come soluzione di matematica, è possibile utilizzare questo

UPDATE mytable SET IsEditable = 1 - IsEditable; 
  • IsEditable = 0 =>1 - IsEditable = 1
  • IsEditable = 1 =>1 - IsEditable = 0
  • IsEditable = Null =>1 - IsEditable = Null
+1

Impossibile invocare due volte questo! Ma funziona perfettamente grazie @ shA.t – Bellash