繁体   English   中英

SQL身份增量和种子

[英]SQL Identity Increment and Seed

我正在使用Microsoft SQL Server作为我的数据库。

我的表中有一个ID列。 在我的使用中,行被删除并重新创建多次。 因此,如果我使用SQL Server的身份增量和身份种子,一段时间后ID号会非常大......

每个新行的ID都大于其他行并不重要。 它必须是独一无二的。

如何在SQL Server中执行此操作? 我应该禁用自动增量并手动设置ID吗? 怎么样?

我正在使用C#和SQL Server Express。

我不确定你为什么关心数字是大还是小(希望用户没有感情价值或对身份价值有任何意义),但避免用尽问题的一种方法是使用BIGINT。 我忘记了确切的数字,但是如果你每秒生成1000个ID就需要80年左右才能达到极限 - 如果从负边界开始,你可以加倍。 是BIGINT是8个字节而不是4个字节但是它仍然比GUID小得多且可用。 如果你将它与数据压缩相结合,那么在你使用了20亿个数字之后,你将不再需要任何存储而不是INT。

不要过度设计这一点,也不要误认为身份值的大小或值应该意味着什么。 这是仅为内部识别和效率生成的替代值。 如果你告诉用户这个价值,那就有些不对劲了。

你可以试试这个代码

--Disable identity SET IDENTITY_INSERT YourSchema.YourTable OFF GO

除非你想搞砸很多东西,即只在存储过程中添加东西,使用select Max(ID)或其中包含next_ID的表,处理多用户访问等,你在2005年就会遇到这种情况(SQL 2012年引入了序列。

其他选项是重新编号ID并重新设置身份,但这也是很多工作。

除了大数字不是问题,它们只占用四个字节,与小字节相同。 滚动是一个问题当然,但这需要一段时间才能做到!

你可以翻转到一个可以扩展的GUID,但是它们会产生一个效率非常低的索引,所以除非你有超过2 ^ 31个记录,否则它们也不值得。

正如其他人所说,Bigint会给你更大的范围,当然还有更大的数字。 :(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM