有没有办法生成2的幂增量的身份或序列?

时间:2012-11-20 11:42:18

标签: sql-server

在我的代码中,我倾向于使用许多Flags枚举,这些枚举对应于包含所有行为属性的DB表。 这样,行为属性既可以在SP中使用,也可以在使用枚举的C#代码中使用。

我的问题在于附加了Flags属性的Enums。

有没有办法为这些表自动生成2的幂作为标识列(或序列)?

PS:目前我手动将代码放在小表中 - 或者以编程方式放置在随时间变化的表格中 - 我更喜欢自动执行

3 个答案:

答案 0 :(得分:7)

据我所知,答案是否定的。标识意味着按您指定的种子值递增,默认值为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

答案 1 :(得分:0)

在列属性的“身份规范”部分(在表格上单击“设计”后可见),您可以将“身份增量”设置为2,以生成ID为1,3,5,7,如果是你在追求什么?

答案 2 :(得分:0)

否:read here

但您可以将身份保留为代理键 然后你使用另一个列,它总是2 ^ id(在插入时使用触发器?)为你的2 ^ n值 或者你可以只使用普通的id,毕竟如果你使用Flags属性你只需要指数,对吗?