摘要: 下文通過舉例的方式講述sqlserver中位運算的相關知識,如下所示: 實驗環境:sqlserver 2008 R2 在sqlserver的許可權設置,我們通常使用1、2、4、8、16、32、64、128等數值分別表示相關信息的某一狀態供業務狀態使用,通過欄位值之間的組合形成一個狀態值存儲到數 ...
摘要:
下文通過舉例的方式講述sqlserver中位運算的相關知識,如下所示:
實驗環境:sqlserver 2008 R2
在sqlserver的許可權設置,我們通常使用1、2、4、8、16、32、64、128等數值分別表示相關信息的某一狀態供業務狀態使用,通過欄位值之間的組合形成一個狀態值存儲到資料庫中,
設置一個角色擁有的許可權
例:
1:代表“查看”按鈕許可權
2:代表"修改"按鈕
4:代表"導出"按鈕
8:代表"刪除"按鈕
...
--例: --許可權表如下: create table userRole(userId varchar(36), roleInfo int); go insert into userRole(userId,roleInfo)values('test',1) ---初始化測試賬號"test",擁有查看許可權 insert into userRole(userId,roleInfo)values('貓貓',2) --當我們需要給用戶加入修改"2"許可權,則可以使用以下運算 update userRole set roleInfo =roleInfo|2 where userId ='test' --當我們需要給用戶加入導出"4"許可權,則可以繼續使用以下運算 update userRole set roleInfo =roleInfo|4 where userId ='test' --當我們需要給用戶刪除導出"4"許可權,則可以繼續使用以下運算 --刪除許可權前需判斷用戶是否存在此許可權,此腳本不可多次運行 --if exists (select null from userRole where roleInfo &4 =4 and userId ='test') ---begin update userRole set roleInfo =roleInfo^4 where userId ='test' and roleInfo&4 =4 --end ---我們檢索所有擁有許可權"修改2"的用戶信息 select * from userRole where roleInfo &2 = 2 go truncate table userRole drop table userRole
註意事項:
此處許可權設置,主要使用二進位中每一位代表一個許可權及位運算的特性進行許可權的增減操作
由於"^異或運算"運算,左表達式1或0 時 右表達式為1時,將分別產生 0、1,所以剔除許可權時,一定要判斷是否存在此許可權
轉自:http://www.maomao365.com/?p=7137