2011-10-31 42 views
0

学生の出席に1時間ごとにデータベースにビット値(真偽)を挿入する必要がある問題が発生しました。 1時間ごとに1つの値(真/偽)が必要です。SQL Serverの1つのバイナリフィールドに複数の値を挿入

ストレートフォワードオプションは、生徒がいるたびに、それぞれ24個の列と入力値を作成することです。しかし確かにこれは最悪のものです。

誰かが私にバイナリフィールドを使用することをお勧めします.1つのフィールドにこれらの値をすべて含めることができます。

実際にmu guiには24個のチェックボックスがあり、いずれのチェックボックスもチェックされていればその値は1として保存されるので、次にチェックボックスをオンにしてください。

SQL Server 2008と.NET Framework 4.0を使用しています。

おかげ

+0

私は何も考えていないので、このバイナリデータ型がどのように動作しているか、親切に私を方向に導いています。 –

+0

これらをチェックアウトするhttp://msdn.microsoft.com/en-us/library/ms188362.aspxおよびhttp://blogs.msdn.com/b/sqlprogrammability/archive/2008/10/31/sql-server- 2008-new-binary-hex-string-conversion-functionality-magnitude-of-magnitude.aspxおよびhttp://msdn.microsoft.com/en-us/でクエリパフォーマンスを飛躍的に向上させることができますlibrary/ms176122.aspxを開き、具体的な質問に戻ってください... – Yahia

+0

これらを確認してくださいhttp://www.mssqltips.com/sqlservertip/1218/sql-server-bitwise-operators-store-multiple-values-in- 1列/ – V4Vendetta

答えて

1

[var]binary(n)を台無しにする必要はありません。あなたは24ビットしか必要としないので、通常の、ヌル入力不可のintを保管してください。次に、コード上でビット演算を実行します。つまり、演算子とビット単位の組み合わせ(&|、おそらく一部は~)のシフト(<</)です。それ以外は必要ありません。だから我々はLSB 00:00作業であると判断した場合には右から左に、その後、午前3時00分に存在し、そして14誰か:00-16:00(包括的)が

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

の価値を持っているでしょうあなたはビット・数学に慣れていない場合は、次のいずれか

  • は、ビット数学
  • で快適はバイナリ
としてそれを保存しようとしないで取得します3210

あなたはまたあなたの状態:

しかし、これは間違いなく最悪のものです。

どういう意味ですか?あなたのシナリオを説明し、SQLサーバーは自動的にbitフィールドを複数集約します。それは実際には悪い選択肢ではないかもしれません。

0

int(および他の型)の個々のビットを操作するためにBitArrayクラスを使用できます。これにより、バイナリオプションを使用する方が簡単になるかもしれませんが、データベースにすべての値を格納することは必ずしも悪い選択肢ではないと思います。なぜこれは悪い選択肢だと思いますか?

関連する問題