一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 通過SQL Server的位運算功能巧妙解決多選查詢方法

通過SQL Server的位運算功能巧妙解決多選查詢方法

2019-12-13 11:32MSSQL教程網 Sql Server

項目中很多業務對象的數據表中都具有Status字段,有人使用int型保存Status,有人使用varchar型

無論使用int還是varchar,對于Status的多選查詢都是不易應對的。舉例,常規思維下對CustomerStatus的Enum設置如下: 

復制代碼代碼如下:


[Serializable] 
public enum CustomerStatus 

New = 0, 
Active = 1, 
Overdue = 2, 
Suspended = 3, 
Closing = 4, 
Closed = 5 


在數據庫中以int形式存儲了Status值。 
如果我在頁面中想一次搜索狀態為Active,Overdue和Suspended狀態的Customer,該怎么辦?程序是不是得把這三個狀態值 
拼成字符串傳遞給SQL去處理?雖然能實現,但是相當低效。 

現在給出一個標準解決方案: 
(1). 所有可能被用作搜索條件的枚舉都應按如下位運算方式定義。 

復制代碼代碼如下:


public enum CustomerStatus 

New = 1, 
Active = 1<<1, 
Overdue = 1<<2, 
Suspended = 1<<3, 
Closing = 1<<4, 
Closed = 1<<5 


(2). 在數據庫設計時,Status的字段必須為int型。 
這樣當我們做多選查詢時@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended 

(3). 查詢語句如下: 

復制代碼代碼如下:


Select * 
From Customer 
Where [Status] & @Status = [Status] 


如果@Status可為null時, 

復制代碼代碼如下:


Select * 
From Customer 
Where ( @Status is null Or [Status] & @Status = [Status]) 


用這樣一條簡單的語句,就可以獲取到所有符合@Status要求的數據行。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久受www免费人成_看片中文 | 沉香如屑西瓜视频免费观看完整版 | 99精品在线免费观看 | 天干夜天天夜天干天ww | а天堂中文最新版在线 | 精品视频一区二区观看 | 日产乱码卡1卡2卡三免费 | 日本玖玖视频 | 国产免费又粗又猛又爽视频国产 | 欧美成人日韩 | 我要看黄色毛片 | 九二淫黄大片看片 | 小草视频免费观看在线 | 欧美一区二区三区大片 | 亚洲性视频在线观看 | 9久热这里只有精品视频在线观看 | 女高h | 国产精品欧美一区二区 | 波多野结衣中文丝袜字幕 | 亚洲26uuuu最新地址 | 51国产| 日韩欧美综合在线二区三区 | 美女被躁了在线观看视频 | 男女男精品网站免费观看 | 好爽好舒服视频 | 91资源站| 2019年国产高清情侣视频 | 国内精品久久久久小说网 | 边摸边吃奶玩乳尖视频 | 国产亚洲精品福利在线 | 欧美精品国产第一区二区 | 四虎成人免费观看在线网址 | 二次元美女内裤凹陷太深 | 日本黄色高清视频网站 | zozo日本另类极品 | 处女摘花视频 | 精品国产福利一区二区在线 | 色婷婷综合久久久中文字幕 | 天天白天天谢天天啦 | 欧美亚洲韩国 | 99精品国产高清自在线看超 |