国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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要求的數據行。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久草精品在线 | 日韩在线小视频 | 国精品一区二区三区 | 一区二区三区在线观看视频 | 一区二区三区国产在线观看 | 亚洲久久久久 | 啵啵影院午夜男人免费视频 | 国产激情精品一区二区三区 | 欧美日韩在线精品 | 久久久久99| 日韩在线一区二区 | 亚洲国产中文在线观看 | 日韩视频精品在线 | av在线官网 | 欧美黑人性生活 | 国产资源在线看 | 日韩中文字幕一区二区三区 | 福利在线观看视频 | 亚洲国产aⅴ精品一区二区 少妇一级片免费看 | 欧美激情视频一区二区三区在线播放 | 自拍在线| 成年人在线看 | 日韩成人av电影 | 久久人人爽人人爽 | 午夜国产精品视频 | av中文字幕在线观看 | 亚洲精品成人 | 国产毛片久久久 | 国产日韩一区二区 | 日日干天天干 | 午夜视频免费在线观看 | 九九热在线视频观看这里只有精品 | 99精品视频一区二区三区 | 一区二区三区自拍 | 成年人免费在线看网站 | 久久精品国产一区二区三区不卡 | 一本大道综合伊人精品热热 | 国产欧美精品区一区二区三区 | 国产日本韩国在线 | 亚洲精品视频在线观看免费 | 久草福利在线视频 |