在SQL Server的单个二进制字段中插入多个值

时间:2011-10-31 05:23:15

标签: c# sql sql-server-2008

我遇到了一个问题,我需要在我的数据库中为学生出勤每小时插入一个比特值(真/假)。每小时应该有一个值(真/假)。

直接选项是每次学生在场时为每个选项创建24列和输入值。但肯定这也是最糟糕的一个。

有人建议我使用二进制字段,一个字段可以包含所有这些值。

实际上mu gui有24个复选框,无论选中哪个复选框,其值都应该存储为1,所以当我下次打开screem时,这些复选框应该保持检查状态。

我正在使用sql server 2008和.net framework 4.0,如果有帮助的话。

由于

2 个答案:

答案 0 :(得分:1)

没有必要惹恼[var]binary(n)。由于您只需要24位,因此存储一个常规的,不可为空的int。然后只需对代码进行位数学运算,即移位(<< / >>)运算符和按位组合(&|以及某些~) 。不需要任何其他东西。因此,如果我们确定LSB是00:00,从右到左工作,那么出现在03:00和14:00-16:00(含)的人将具有值

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

如果你对比特数学不满意,那么:

    使用bit-math
  • 获取
  • 不要尝试将其存储为二进制文件

你还说:

  

但肯定这也是最糟糕的一次。

以什么方式?它描述了您的场景,SQL-server将自动为您压缩多个bit字段。这可能不是一个糟糕的选择。

答案 1 :(得分:0)

您可以使用BitArray类来操作int(和其他类型)的各个位。这可能会让您更容易使用二进制选项,但是我认为将数据库中的所有值存储起来并不是一个糟糕的选择。为什么您认为这是一个糟糕的选择?