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

本文关键字:插入 字段 二进制 SQL Server 单个 | 更新日期: 2023-09-27 18:13:04

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

直接的选项是创建24列,并在每次有学生出现时为每列输入值。但毫无疑问,这也是最糟糕的。

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

实际上mu gui有24个复选框,无论哪个复选框被选中,它的值应该存储为1,所以当我下次打开屏幕时,这些复选框应该保持选中状态。

我使用sql server 2008和。net framework 4.0,如果它有帮助。

谢谢

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

没有必要与[var]binary(n)混淆。因为你只需要24位,存储一个常规的,不可空的int。然后只需对代码进行位数学运算,即移位(<</>>)操作符和位组合(&, |和一些~)。不需要其他任何东西。因此,如果我们决定LSB是00:00,从右到左工作,那么在03:00和14:00-16:00(包括)在场的人的值将为

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

如果您不熟悉位计算,那么:

  • get舒适的位数
  • 不要尝试将其存储为二进制

您还声明:

但这无疑也是最糟糕的。

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

您可以使用BitArray类来操作int(和其他类型)的单个位。这可能使您更容易与二进制选项,但我不认为这一定是一个坏的选择,存储在数据库中的所有值。你为什么觉得这是个糟糕的选择?