2011-10-31 46 views
0

我遇到了一個問題,我需要在每個小時的數據庫中爲學生出勤插入位值(真/假)。每個小時應該有一個值(真/假)。在SQL Server的單個二進制字段中插入多個值

直接選項是爲每個人創建24列和輸入值,每次有學生在場。但肯定這也是最糟糕的一個。

有人建議我使用二進制字段,一個字段可以包含所有這些值。

實際上,mu gui有24個複選框,選中的複選框的值應該保存爲1,所以當下次打開screem時,應該保持這些複選框被選中。

我使用的是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-能夠顯着提高相關查詢性能的大小.aspx和http://msdn.microsoft.com/en-us/庫/ ms176122.aspx,然後回來,具體問題... – Yahia

+0

請檢查這些http://www.mssqltips.com/sqlservertip/1218/sql-server-bitwise-operators-store-multiple-values-in-一列/ – V4Vendetta

回答

1

沒有必要惹[var]binary(n)。由於您只需要24位,因此可以存儲常規的,不可爲空的int。然後,只需對您的代碼進行位運算,即移位(<</>>)運算符和按位組合(&,|和可能某些~)。沒有其他需要。因此,如果我們決定LSB爲00:00,工作從右到左,然後就有人出現在03:00和14:00-16:00(含)將有

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

值如果你不熟悉位運算,則:

  • 得到舒服位數學
  • 不要試圖把它作爲二進制

您還聲明:

但是,這也是最糟糕的一個。

以什麼方式?它描述了你的場景,SQL服務器會自動爲你壓縮多個bit字段。這可能不是一個壞的選擇。

0

您可以使用BitArray類來操作int(和其他類型)的各個位。這可能會讓你更容易使用二進制選項,但是我不認爲將所有值存儲在數據庫中是不好的選擇。爲什麼你認爲這是一個糟糕的選擇?

相關問題