Come utilizzare un campo di bit in TSQL (per aggiornamenti e letture)
Imposta il campo bit su 0 all'inizio (che significa nessuna modifica) dovresti usare type int per un massimo di 32 bit di dati e bigint per un massimo di 64 bit di dati.
Per impostare un bit in un campo bit usa il |
(operatore bit OR) nell'istruzione di aggiornamento, ad esempio
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
ecc. per ogni campo usa il 2 alla potenza di N-1 per il valore dopo il |
Per leggere un campo di bit usa &
(operatore bit AND) e verifica se è vero, ad esempio
SELECT field1, field2,
CASE WHEN (bitfield & 1) = 1 THEN 'field1 mod' ELSE 'field1 same' END,
CASE WHEN (bitfield & 2) = 2 THEN 'field2 mod' ELSE 'field2 same' END
FROM table
nota che probabilmente non userei il testo poiché verrà utilizzato da un'applicazione, qualcosa del genere funzionerà
SELECT field1, field2,
CASE WHEN (bitfield & 1) = 1 THEN 1 ELSE 0 END AS [field1flag],
CASE WHEN (bitfield & 2) = 2 THEN 1 ELSE 0 END AS [field2flag]
FROM table
oppure puoi usare !=0 sopra per renderlo semplice come ho fatto nel mio test qui sotto
Devi eseguire effettivamente il test per non avere errori, fai clic per lo script di test
risposta originale:
Se hai meno di 16 colonne nella tua tabella, puoi memorizzare i "flags" come un numero intero, quindi utilizzare il metodo bit flag per indicare le colonne che sono cambiate. Ignora o non preoccuparti di contrassegnare quelli che non ti interessano.
Pertanto, se flagfield BOOLEAN AND 2^N è vero, indica che l'ennesimo campo è cambiato.
Oppure un esempio per max di N =2
0 - non è cambiato nulla (tutti i bit 0)
1 - campo 1 modificato (primo bit 1)
2 - campo 2 modificato (secondo bit 1)
3 - campo 1+2 modificato (primo e secondo bit 1)
vedere questo collegamento per una definizione migliore:http://en.wikipedia.org/wiki/Bit_field