4

我要尋找一些提示或技巧這一設計挑戰,我起來反對:TSQL vbinary bitmasking用VARBINARY右側運營商

我有一個需要位掩碼兩個存儲的數據庫大小相同VARBINARY領域。只是爲了澄清,不,這不是一個「權限表」或任何東西。我會規範化這些項目的數據庫,這些數據不能被標準化。我爲我們的應用程序生成的動態存儲位存儲varbinary字段。我也在用另一個varbinary查詢來對這些位進行搜索。在.net中,我使用BigInteger類型來處理所有的位掩碼,並且它做的很好,但我正在考慮將這個進程卸載到數據庫服務器,以在將結果傳回給調用者之前對結果進行篩選。現在,我支持varbinary(512)字段類型,並希望同時執行AND和OR運算符,並且能夠比較右側運算符中的ANY(OR)或ALL(AND)位是否使它通過。 MSDN說,你可以使用varbinary()和右手邊的操作符max bigint,但是我需要超過這個。

我發現的一個很好的資源是Adam Machanic在這個主題上發表的博客文章,但是在我深入研究之前看看是否還有其他方法。

http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/bitmask-handling-part-3-logical-operators.aspx

這將是SQL 2005或更高。如果2008年有一個功能在2005年沒有找到,我會很好,但我還沒有找到一個。

任何提示或技巧,不勝感激。

謝謝。

特拉維斯Whidden

+1

我對這個答案仍然很好奇,但現在我在SQL中創建了一個CLR函數來執行我想測試的位掩碼操作。 – TravisWhidden

+2

將位掩碼存儲在SQL Server中作爲您要過濾的字段不是最大的設計,因爲它是無法進行索引的搜索。 (所以每個搜索都有一個表掃描)。就我個人而言,我會將匹配卸載到應用程序服務器,並使用數據庫服務器進行查詢管理器可優化的查詢。 –

+0

如果BigInt在.NET中工作,那麼爲什麼BigInt在SQL中不夠大。 – Paparazzi

回答

0

如果你知道的位圖的最大長度,你可以分攤到多個列,並且單獨屏蔽它們。

儘管它真的很麻煩。