Sql server 有没有办法生成以2的幂递增的标识或序列?

Sql server 有没有办法生成以2的幂递增的标识或序列?,sql-server,Sql Server,在我的代码中,我倾向于使用许多标志枚举,这些标志枚举对应于包含其所有行为属性的DB表。 这样,行为属性既可以在SP中使用,也可以在使用枚举的C#代码中使用 我的问题是带有Flags属性的枚举 是否有一种方法可以自动生成2的幂作为此类表的标识列(或序列) PS:目前我手动将代码放在小表中,或者以编程方式放在随时间变化的表中,我更喜欢自动执行此操作在列属性的“标识规范”部分(单击表上的“设计”后可见),您可以将“标识增量”设置为2,以生成1、3、5的ID,7如果这就是你想要的?据我所知,答案是否定的

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

我的问题是带有Flags属性的枚举

是否有一种方法可以自动生成2的幂作为此类表的标识列(或序列)


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

在列属性的“标识规范”部分(单击表上的“设计”后可见),您可以将“标识增量”设置为2,以生成1、3、5的ID,7如果这就是你想要的?

据我所知,答案是否定的。Identity意味着增加你指定的seed值,默认值为1。但是你可以有2的倍数的身份。e、 g.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
否:

但是您可以将该标识保留为代理密钥 然后使用另一个始终为2^id的列(插入时使用触发器?)
或者您可以只使用普通id,毕竟,如果您使用的是Flags属性,您只需要指数,对吗?

您不能将标识看作位位置,从0开始吗?因此,要旋转的标志位变为
1@hyde至于使用指数,我想用一种简单的方法将值加载到我的C#代码中,如果我保持值不变,我可以在C#代码中正确处理它。即使在SP中,我也可以使用它&相当容易——唯一不容易的是,它没有内置的对这种使用的支持。理想情况下,我希望能够将这样的内容用作外键,以便sql server将包含多个此类值的添加的列视为引用ref表中所有适当的行。我喜欢这种解决方案—简单而优雅—并且我可以将计算列作为索引使用