TSQL でビットフィールドを使用する方法 (更新と読み取り用)
開始時にビットフィールドをデフォルトの 0 (変更なし) に設定します。最大 32 ビットのデータには型 int を使用し、最大 64 ビットのデータには bigint を使用する必要があります。
ビット フィールドにビットを設定するには、|
を使用します。 (ビット OR 演算子) 更新ステートメントで、たとえば
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
|
の後の値には、各フィールドの 2 の N-1 乗を使用します。
ビット フィールドを読み取るには、&
を使用します (ビット AND 演算子) を実行し、それが真かどうかを確認します。たとえば、
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
これはアプリケーションで使用されるため、おそらくテキストは使用しないことに注意してください。このようなものが機能します
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
または、上記の !=0 を使用して、以下のテストで行ったように簡単にすることもできます
エラーがないことを実際にテストする必要があります。テスト スクリプトをクリックしてください
元の回答:
テーブルに 16 列未満の列がある場合は、「フラグ」を整数として格納し、ビット フラグ メソッドを使用して、変更された列を示すことができます。気にしないものは無視するか、気にしないでください。
したがって、flagfield BOOLEAN AND 2^N が true の場合、N 番目のフィールドが変更されたことを示します。
または最大 N =2 の例
0 - 何も変更されていません (すべてのビットが 0)
1 - フィールド 1 が変更されました (最初のビット 1)
2 - フィールド 2 が変更されました (2 番目のビット 1)
3 - フィールド 1+2 が変更されました (最初と 2 番目のビット 1)
より良い定義については、次のリンクを参照してください:http://en.wikipedia.org/wiki/Bit_field>