Sql server 有没有办法通过加倍来自动增加sql server id?
我是否可以在sql server中的id字段上设置一个自动增量,使每行的id增加一倍?否,您只能以算术方式(通过添加)递增,而不能以几何方式(通过相乘)递增。Sql server 有没有办法通过加倍来自动增加sql server id?,sql-server,double,auto-increment,Sql Server,Double,Auto Increment,我是否可以在sql server中的id字段上设置一个自动增量,使每行的id增加一倍?否,您只能以算术方式(通过添加)递增,而不能以几何方式(通过相乘)递增。 这样的功能无论如何都不会有用。如果第一行的值为1,然后乘以2,则行值将为1、2、4、8,。。。第64排为18446744073709551616 最后一个值太大,无法放入bigint列,因此每个表最多只能存储63行 如果您需要的行数少于64行,那么关闭主键上的自动递增功能并使用设置的值并不太麻烦。否,您只能以算术方式递增(通过加法),而不
这样的功能无论如何都不会有用。如果第一行的值为1,然后乘以2,则行值将为1、2、4、8,。。。第64排为18446744073709551616 最后一个值太大,无法放入
bigint
列,因此每个表最多只能存储63行
如果您需要的行数少于64行,那么关闭主键上的自动递增功能并使用设置的值并不太麻烦。否,您只能以算术方式递增(通过加法),而不能以几何方式递增(通过乘法)。
这样的功能无论如何都不会有用。如果第一行的值为1,然后乘以2,则行值将为1、2、4、8,。。。第64排为18446744073709551616 最后一个值太大,无法放入
bigint
列,因此每个表最多只能存储63行
如果您需要的行数少于64行,那么关闭主键上的自动递增功能并使用设置的值就不太麻烦了。您的意思是每行的值都是前一行的两倍,如1、2、4、8、16……?这有什么意义?行的总数会有一个非常低的限制,这样就可以预先填充行了。你的意思是每一行都有前一行的两倍值,比如1,2,4,8,16…?这有什么意义?总行数会有一个非常低的限制,这样就可以预先填充行了。谢谢我们曾考虑将其用于一些二进制处理,但最终可能会将字段存储为十六进制字符串,因为大小限制SQL Server具有用于存储二进制数据的
binary
和varbinary
列类型,您可以(也应该这样做)使用它们保存二进制处理的数据。使用1的增量,然后自己计算。也就是说,0=power(2,0),1=power(2,1),等等。但是正如斯维科指出的,您仍然被限制使用63个“位”,因为BigInt是有符号的,所以限制实际上是62行。添加到@Ben Thul的评论中。我已经看过两个专栏了。第一个col是增量为1的标识。插入所有行,然后对表中的第二列进行单独更新,使其具有相等的幂(cast(2为BigInt),IdentityColumn)。你需要确保它是一个BigInt。然后,在第二列上创建聚集索引。您不能将其设为主键,因为它最初将有多个空行。这个特性很少有用,但我看到的具体情况是合理的(执行一些位运算),这里有一个快速的证据证明它是62。试试这两种方法:选择力量(2为bigint),63)选择力量(2为bigint),62)哦。谢谢我们曾考虑将其用于一些二进制处理,但最终可能会将字段存储为十六进制字符串,因为大小限制SQL Server具有用于存储二进制数据的binary
和varbinary
列类型,您可以(也应该这样做)使用它们保存二进制处理的数据。使用1的增量,然后自己计算。也就是说,0=power(2,0),1=power(2,1),等等。但是正如斯维科指出的,您仍然被限制使用63个“位”,因为BigInt是有符号的,所以限制实际上是62行。添加到@Ben Thul的评论中。我已经看过两个专栏了。第一个col是增量为1的标识。插入所有行,然后对表中的第二列进行单独更新,使其具有相等的幂(cast(2为BigInt),IdentityColumn)。你需要确保它是一个BigInt。然后,在第二列上创建聚集索引。您不能将其设为主键,因为它最初将有多个空行。这个特性很少有用,但我看到的具体情况是合理的(执行一些位运算),这里有一个快速的证据证明它是62。尝试这两种方法:选择电源(强制转换(2为bigint),63)选择电源(强制转换(2为bigint),62)