私は反対です:TSQL vbinary bitmaskingとvarbinaryの右側のオペレータ
私はデータベースに保存されている同じサイズのvarbinary型のフィールドのうちの2つをビットマスクの必要性を持っています。明確にするために、これは「パーミッション・テーブル」または何かではありません。私はこれらの種類のアイテムについてデータベースを正規化し、このデータを正規化することはできません。私はアプリケーションが生成するビットの動的記憶域のためのvarbinaryフィールドを格納しています。私はまた別のvarbinaryクエリでこれらのビットを検索しています。 .netではBigInteger型を使用してビットマスキングをすべて処理しますが、この処理をデータベースサーバにオフロードして呼び出し元に渡す前に結果をフィルタリングすることを考えています。現在、私はvarbinary(512)フィールド型までサポートしており、AND演算子とOR演算子の両方を実行し、右側の演算子のビットのANY(OR)またはALL(AND)スルー。 MSDNによれば、右側の演算子であるbigintを使ってvarbinary()を使うことができますが、それを超える必要があります。
私が見つけた素敵な資料は、このトピックに関するAdam Machanicのブログですが、他のアプローチがあるかどうかを調べる前に調べています。
これは、SQL 2005以上のためになります。 2008年の機能が2005年に見つからなければ、私はそれでいいだろう、まだ私はまだそれを特定することができませんでした。
何かヒントやトリックをいただければ幸いです。
ありがとうございました。
トラヴィスWhidden
私はまだこの回答が不思議ですが、今は私がテストしたいビットマスキング操作を行うためにSQLでCLR関数を作成しました。 – TravisWhidden
フィルタを適用するフィールドとしてSQL Serverにビットマスクを格納することは、索引付けできない検索であるため、最大の設計ではありません。 (したがって、検索ごとにテーブルスキャンが行われます)。個人的には、マッチングをアプリケーションサーバーにオフロードし、クエリガバナーによって最適化できるクエリに対してdbサーバーを使用します。 –
BigIntが.NETで動作する場合、BigIntはSQLで十分ではありません。 – Paparazzi