c# - SQL 标识增量和种子

标签 c# sql sql-server sql-server-2005

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

我的表中有一个 ID 列。在我的使用中,行被删除并重新创建了很多次。所以,如果我使用 SQL Server 的 Identity Increment 和 Identity Seed,一段时间后 ID 号会非常大...

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

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

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

最佳答案

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

不要对此进行过度设计,也不要错误地认为标识值的大小或值应该是有意义的。这是仅为内部识别和效率生成的替代值。如果您要告诉用户这个值,那就不对了。

关于c# - SQL 标识增量和种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189764/

相关文章:

c# - 为什么这个泛型方法要求 T 有一个公共(public)的、无参数的构造函数?

C# 如何创建类列表

java - hibernate : How to get last n rows in spring boot JpaRepository?

mysql - Drupal + phpBB 评论最多的用户

sql-server - 如何处理SQL Server T-SQL try-catch block 中丢失的客户端连接?

SQL:LIKE 和 Contains — 不同的结果

sql-server - 根据 SQL 结果忽略元素

c# - 字符串不变性在向开发人员解释字符串引用时扮演什么角色?

c# - 检测图中异常快速的跳跃

php - 循环遍历 MySQL 数据库直到字段 = 'specified value'