最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2012年01月09日 20:45:08   作者:  
項(xiàng)目中很多業(yè)務(wù)對(duì)象的數(shù)據(jù)表中都具有Status字段,有人使用int型保存Status,有人使用varchar型
無(wú)論使用int還是varchar,對(duì)于Status的多選查詢(xún)都是不易應(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)我們做多選查詢(xún)時(shí)@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended

(3). 查詢(xún)語(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ù)行。

相關(guān)文章

最新評(píng)論

射洪县| 姜堰市| 高密市| 汉源县| 天长市| 会同县| 呈贡县| 辽宁省| 阳新县| 马山县| 宣威市| 天全县| 临桂县| 长寿区| 紫金县| 汉寿县| 海口市| 合江县| 九龙县| 凤山县| 高唐县| 连城县| 伊金霍洛旗| 石城县| 邹城市| 溧水县| 广宗县| 眉山市| 荣成市| 棋牌| 格尔木市| 阿拉尔市| 安岳县| 南昌县| 宁强县| 称多县| 信宜市| 张家口市| 姚安县| 二连浩特市| 多伦县|