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

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

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

2020-07-25 13:17:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
無(wú)論使用int還是varchar,對(duì)于Status的多選查詢都是不易應(yīng)對(duì)的。舉例,常規(guī)思維下對(duì)CustomerStatus的Enum設(shè)置如下:
復(fù)制代碼 代碼如下:

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

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

現(xiàn)在給出一個(gè)標(biāo)準(zhǔn)解決方案:
(1). 所有可能被用作搜索條件的枚舉都應(yīng)按如下位運(yùn)算方式定義。
復(fù)制代碼 代碼如下:

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

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

(3). 查詢語(yǔ)句如下:
復(fù)制代碼 代碼如下:

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

如果@Status可為null時(shí),
復(fù)制代碼 代碼如下:

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

用這樣一條簡(jiǎn)單的語(yǔ)句,就可以獲取到所有符合@Status要求的數(shù)據(jù)行。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乾安县| 延庆县| 高邮市| 定远县| 兴业县| 东明县| 成都市| 镇雄县| 新源县| 崇州市| 宁夏| 苏州市| 临猗县| 岳普湖县| 蓝田县| 平顺县| 颍上县| 阿鲁科尔沁旗| 平山县| 徐汇区| 远安县| 新龙县| 永德县| 万载县| 孝义市| 博客| 浪卡子县| 城口县| 准格尔旗| 福泉市| 鄂托克旗| 长寿区| 承德县| 禹州市| 鸡泽县| 景谷| 奇台县| 体育| 离岛区| 施甸县| 西峡县|