Как использовать битовое поле в TSQL (для обновлений и чтений)
Установите битовое поле по умолчанию равным 0 при запуске (то есть без изменений), вы должны использовать тип int для максимум 32 бит данных и bigintдо 64 бит данных.
Чтобы установить бит в битовом поле, используйте |
(оператор ИЛИ в битах) в операторе обновления, например,
UPDATE table
SET field1 = 'new value', bitfield = bitfield | 1
UPDATE table
SET field2 = 'new value', bitfield = bitfield | 2
и т. д. дляв каждом поле используется значение от 2 до степени N-1 для значения после |
. Для чтения битового поля используйте &
(оператор бита И) и посмотрите, является ли оно истинным, например,
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 столбцов, вы можете сохранить «флаги» как целое число, а затем использовать битовый флаг mметод для обозначения столбцов, которые изменились.Просто игнорируйте или не потрудитесь пометить те, которые вас не интересуют.
Таким образом, если флаговое поле BOOLEAN AND 2 ^ N истинно, это означает, что N-е поле изменилось.
Илипример для максимального значения N = 2
0 - ничего не изменилось (все биты 0)
1 - поле 1 изменено (первый бит 1)
2 - поле 2 изменено(второй бит 1)
3 - поле 1 + 2 изменено (первый и второй бит 1)
см. эту ссылку для лучшего определения: http://en.wikipedia.org/wiki/Bit_field