Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Melacak bidang yang diubah tanpa mempertahankan riwayat

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengurangan antara dua kueri sql

  2. Penghapusan Otomatis Transaksi yang Terlupakan di MS SQL Server

  3. Pembaruan SQL dari satu Tabel ke Tabel lain berdasarkan kecocokan ID

  4. Berikan Akses Pengguna msdb ke Profil Email Database di SQL Server (T-SQL)

  5. SQL Urutkan String Numerik Setelah Split