將不確定變為確定~SQLSERVER是否可以進行位運算?
有時,我們在設計表結構時,有的字段可能同時具有幾種狀態,如小微自己的文件屬性也是屬于這種情況的,“只讀,歸檔,隱藏”,但你對一個文件設置屬性時,事實上是可以將這三個屬性同時賦予一個對象的,這對于我們來說是正常的,那程序內部是怎么實現的呢?
首先一個枚舉,SQL里可能是一張表,也可能是事先規定好的幾個值,如: 只讀1,歸檔2,隱藏3
再沒有看.net源代碼時,我認為可能是這樣存儲的
文件屬性為只讀+歸檔,值為:1,2
我們看到它是用,分開的,然后再分別去求和就可以了
但當我看了.net源代碼后,我的作法有了一個變化,那就是利用位移運算,應該說從性能到程序清晰度上有一個飛躍
文件屬性為只讀+歸檔,值為:3 (3=1+2)
當然我們需要在數據庫中查詢出包含歸檔(2)的屬性的記錄時,如何去實現呢
其實,SQL與C#里的位移運算符號是完全相同的,它有以下幾種情況
1 update User_Info set Status = Status | 8 where UserID = 1 --更新user_info里的status字段,在原有基礎上增加8 2 3 update User_Info set Status = Status & (~8) where UserID = 1 --更新user_info里的status字段,在原有基礎上減去8,如果原來的值中不包含8,那會在原來的值上加上8 4 5 select * from User where Status & 8 >0 --找到所到包括8的記錄
呵呵,怎么樣,挺方便吧,這只是表面的,事實上,它在查詢上性能也遠遠高于第一種拼接字符的方法。
浙公網安備 33010602011771號