Вставка нескольких значений в одно двоичное поле SQL Server - PullRequest
0 голосов
/ 31 октября 2011

Я столкнулся с проблемой, когда мне нужно вставлять битовые значения (true / false) в мою базу данных для каждого часа посещаемости студентов. Для каждого часа должно быть одно значение (true / false).

Прямой вариант - создать 24 столбца и ввести значение для каждого из них, каждый раз, когда присутствует студент. Но, безусловно, это тоже самое худшее.

Кто-то предложил мне использовать двоичное поле для этого, одно поле может содержать все эти значения.

На самом деле у mu gui есть 24 флажка, и любой флажок установлен, его значение должно быть сохранено как 1, поэтому при следующем открытии экрана эти флажки должны оставаться отмеченными.

Я использую sql server 2008 и .net framework 4.0, если это поможет.

Спасибо

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Нет необходимости связываться с [var]binary(n). Поскольку вам нужно только 24 бита, храните обычные, не обнуляемые int. Затем просто выполните бит-математику в своем коде, то есть операторы сдвига (<< / >>) и битовую комбинацию (&, | и, возможно, некоторые ~). Больше ничего не нужно. Поэтому, если мы решим, что младший бит равен 00:00, работает справа налево, то кто-то, присутствующий в 03:00, и 14: 00-16: 00 (включительно) будет иметь значение

(1 << 3) | (1 << 14) | (1 << 15) | (1 << 16) ==> 114696

Если вас не устраивает бит-математика, то либо:

  • получить удобно с бит-математикой
  • не пытайтесь сохранить его как двоичный файл

Вы также заявляете:

Но определенно это тоже худший.

Каким образом? Он описывает ваш сценарий, и SQL-сервер будет автоматически сжимать несколько полей bit. На самом деле это может быть неплохим вариантом.

0 голосов
/ 31 октября 2011

Вы можете использовать класс BitArray для управления отдельными битами типа int (и других типов). Это может упростить вам использование бинарного параметра, однако я не думаю, что он обязательно является плохим вариантом для хранения всех значений в базе данных. Почему вы думаете, что это такой плохой вариант?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...