2012-11-20 17 views
4

在我的代碼中,我傾向於使用很多Flags枚舉,這些Flags枚舉對應於包含所有行爲屬性的數據庫表。 通過這種方式,可以在SP和使用枚舉的C#代碼中使用行爲屬性。有沒有辦法產生2的冪次遞增的身份或序列?

我的問題是與Flags屬性附加到它們的枚舉。

有沒有辦法自動生成2的權力作爲標識列(或作爲一個序列)這樣的表?

PS:目前我手動放置在小表的代碼 - 點擊後,我更喜歡自動執行

+0

難道你不認爲身份是位的位置,從0開始?所以標誌位變成'1 << id'。 – hyde

+0

@hyde至於使用指數 - 我想要一個簡單的方法來將值加載到我的C#代碼 - 如果我保持該值 - 我可以在C#代碼中正確處理它。即使在SP中,我也可以使用&相當簡單 - 唯一不容易的是,這種用法沒有內置的支持。 理想情況下,我希望能夠使用類似這樣的東西,甚至作爲一個外鍵 - 這樣一個包含幾個這樣的值的添加的列將被sql服務器視爲引用ref表中的所有適當的行。 –

回答

5

據我所知,答案是NO。身份是爲了增加您指定的種子值,默認爲1。但是你可以擁有2的倍數的身份。 2,4,6,8,10

id INT identity(2, 2) -- starts at 2, increments by 2 

如果你想要別的東西,你可能需要實現你自己的東西。

計算列

create table t 
(
    id int identity, 
    power_id as power(2, id), 
    name varchar(50) 
) 

Results 

ID POWER_ID TEXT 
------------------------------- 
1 2   SHORT  ----2^1 
2 4   MEDIUM  ----2^2 
3 8   LONG  ----2^3 
+0

我喜歡這個解決方案 - 簡單而優雅 - 我可以保留計算列作爲索引與 –

0

在上一列屬性的「身份規範」部分(可見 - 隨時間變化的方式或編程在表'設計'在你的桌子上),你可以將'身份增量'設置爲2,以便生成1,3,5,7的ID(如果這就是你所追求的)?

0

編號:(?上插入使用觸發器)read here

,但你可以保持身份代理鍵 那你就用另一列這始終是2^ID對於你的2^n值 或者你可以使用普通的ID,畢竟如果你使用Flags屬性,你只需要指數,對吧?

+0

一起工作感謝閱讀材料 –

相關問題