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

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

 更新時間:2012年01月09日 20:45:08   作者:  
項目中很多業(yè)務對象的數(shù)據(jù)表中都具有Status字段,有人使用int型保存Status,有人使用varchar型
無論使用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ù)行。

相關文章

最新評論

綦江县| 崇左市| 阿克苏市| 准格尔旗| 万年县| 浮梁县| 安图县| 南靖县| 台山市| 齐齐哈尔市| 永川市| 乌兰浩特市| 濮阳县| 永川市| 平罗县| 左云县| 常宁市| 镇宁| 成安县| 莱阳市| 芒康县| 大荔县| 迁西县| 阿拉善左旗| 罗甸县| 澄城县| 汪清县| 金昌市| 鄂州市| 阿拉善盟| 巴马| 蓬安县| 呼玛县| 大名县| 恭城| 临清市| 娄烦县| 卓资县| 花垣县| 长白| 孟州市|