国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

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

2024-08-31 00:45:19
字體:
供稿:網(wǎng)友
無論使用int還是varchar,對于Status的多選查詢都是不易應對的。舉例,常規(guī)思維下對CustomerStatus的Enum設置如下:

復制代碼 代碼如下:


[Serializable]
public enum CustomerStatus
{
New = 0,
Active = 1,
Overdue = 2,
Suspended = 3,
Closing = 4,
Closed = 5
}


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

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

復制代碼 代碼如下:


public enum CustomerStatus
{
New = 1,
Active = 1<<1,
Overdue = 1<<2,
Suspended = 1<<3,
Closing = 1<<4,
Closed = 1<<5
}


(2). 在數(shù)據(jù)庫設計時,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要求的數(shù)據(jù)行。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 两当县| 弥勒县| 楚雄市| 日照市| 南充市| 静安区| 封开县| 德江县| 木里| 临西县| 霸州市| 云和县| 灌南县| 大新县| 双流县| 娱乐| 安岳县| 丰都县| 宜春市| 于都县| 安新县| 滁州市| 定边县| 河池市| 阜康市| 正镶白旗| 兴业县| 定边县| 康乐县| 彝良县| 刚察县| 绥宁县| 海安县| 宁海县| 巫山县| 平南县| 德江县| 鹤岗市| 琼结县| 泊头市| 德清县|