如何在 SQL Server 中生成唯一递增的整数值?
Posted
技术标签:
【中文标题】如何在 SQL Server 中生成唯一递增的整数值?【英文标题】:How do I generate a unique increasing integer value in SQL Server? 【发布时间】:2012-03-01 18:49:03 【问题描述】:我有以下问题。 SQL 表存储作业项,每个项都有state
。项目可以一起或单独更改状态和其他属性。我希望能够为每个作业项分配一个唯一的递增整数(64 位或更多位),该整数仅在我要求时分配,而不是像timestamp
行为那样在每次更新时更新。所以我希望能够做两个操作:
-
更新一些其他字段而不更改行上的整数和
更新状态和那个整数
当整数发生变化时,它应该大于为该列生成的所有其他此类整数(每个表或每个数据库当然也会这样做)。
这需要可扩展,以便多个客户端可以使用数据库而不会受到严重处罚。
我该怎么做?
【问题讨论】:
【参考方案1】:看这里http://blogs.msdn.com/b/sqlazure/archive/2010/07/15/10038656.aspx。应该有帮助
但简而言之,您需要在表中声明如下字段:
Id bigint PRIMARY KEY IDENTITY (1,1)
【讨论】:
+1 :但是,不需要是PRIMARY KEY
,如果需要/适当可以使用它。诚然,IDENTITY 列通常是这种情况:)【参考方案2】:
听起来你需要一个序列。
这与您的表分离(与 IDENTITY 不同),可以是表范围或数据库范围:由您决定。
即将推出的 SQL Server 2012 原生支持序列,但在此之前,您可以根据以下 dba.se 问题模拟一个:https://dba.stackexchange.com/q/3307/630
【讨论】:
以上是关于如何在 SQL Server 中生成唯一递增的整数值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sql server 中生成随机 nvarchars