Поскольку вы открыты для использования целочисленного поля, добавьте в таблицу столбец для хранения числовых значений месяца.
alter table myTable
add column MonthNum int
alter table myTable
add constraint CK_Month_Range CHECK (MonthNum > 0 and MonthNum < 13)
Сохранение битового представления месяца не принесет никакой пользы.число в целочисленном поле, поскольку будет занято такое же количество места (4 байта).Многие системные таблицы используют побитовые значения, но в этом случае я не вижу, как это могло бы улучшить что-либо.
Чтобы проверить, есть ли они, я, вероятно, сделал бы одну из двух вещей.
- Использовать столбец значений
bit
для IsCurrent - Использовать форму управления версиями строк, где последней обновленной датой-временем будет текущая запись
Вот побитовый тип проверки, будет ли ваше приложение отправлять целое число для параметра
declare @table table (id int identity(1,1), jan bit, feb bit, mar bit, apr bit, may bit, jun bit, jul bit, aug bit, sep bit, oct bit, nov bit, [dec] bit)
insert into @table
values
(0,0,0,0,0,0,0,1,0,0,0,0), --aug
(0,0,1,0,0,0,0,0,0,0,0,0), --mar
(0,0,0,0,0,0,0,0,0,0,0,1), --dec
(1,0,0,0,0,0,0,0,0,0,0,0) --jan
declare @month int = 3
select *, bitwise = concat(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,[dec])
from @table
where charindex('1',concat(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,[dec])) = @month
Если они передаются в виде строк, например «Январь», тогда вы просто присоединитесь к таблице поиска.