無論使用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 = 11,
Overdue = 12,
Suspended = 13,
Closing = 14,
Closed = 15
}
(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要求的數據行。
您可能感興趣的文章:- C# 位運算符整理
- Erlang的運算符(比較運算符,數值運算符,移位運算符,邏輯運算符)
- shell 基本計算、邏輯運算、位運算詳解
- c語言中用位運算實現加法技巧介紹
- Java中位運算(移位、位與、或、異或、非) 的簡單實例
- C#枚舉中的位運算權限分配淺談
- C語言位運算符:與、或、異或、取反、左移與右移詳細介紹
- 詳細介紹Python語言中的按位運算符
- JavaScript按位運算符的應用簡析
- 圖文詳解C語言位運算基礎知識