Cara menggunakan bitfield di TSQL (untuk pembaruan dan pembacaan)
Setel bitfield ke default ke 0 di awal (artinya tidak ada perubahan), Anda harus menggunakan type int untuk data hingga 32 bit dan bigint untuk data hingga 64 bit.
Untuk mengatur bit di bidang bit gunakan |
(bit ATAU operator) dalam pernyataan pembaruan, misalnya
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
dll untuk setiap bidang gunakan 2 pangkat N-1 untuk nilai setelah |
Untuk membaca bidang bit gunakan &
(bit AND operator) dan lihat apakah benar, misalnya
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
catatan Saya mungkin tidak akan menggunakan teks karena ini akan digunakan oleh aplikasi, sesuatu seperti ini akan berfungsi
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
atau Anda dapat menggunakan !=0 di atas untuk membuatnya sederhana seperti yang saya lakukan pada pengujian saya di bawah ini
Harus benar-benar menguji agar tidak ada kesalahan, klik untuk skrip pengujian
jawaban asli:
Jika Anda memiliki kurang dari 16 kolom di tabel Anda, Anda bisa menyimpan "bendera" sebagai bilangan bulat kemudian gunakan metode bendera bit untuk menunjukkan kolom yang berubah. Abaikan saja atau jangan repot-repot menandai yang tidak Anda pedulikan.
Jadi jika flagfield BOOLEAN AND 2^N benar, ini menunjukkan bahwa bidang ke-N berubah.
Atau contoh untuk maks N =2
0 - tidak ada yang berubah (semua bit 0)
1 - bidang 1 diubah (bit pertama 1)
2 - bidang 2 diubah (bit kedua 1)
3 - bidang 1+2 diubah (bit pertama dan kedua 1)
lihat tautan ini untuk definisi yang lebih baik:http://en.wikipedia.org/wiki/Bit_field