SQL Server自增列没有主键

20

在 SQL Server 中,是否可以自动递增一个列而不将其作为主键?

如果可以,如何实现。

谢谢


1
当然可以 - 列只需要声明为 INT IDENTITY(或 BIGINT)- 就这么简单。没有必要将其作为主键 - 没有任何要求... - marc_s
3
有什么阻碍你尝试的吗? - Adriano Carneiro
@adrian:……但是请不要在您的生产系统上操作!:-) - marc_s
@marc_s 好主意!那么老旧的沙盒数据库怎么样?什么,你没有吗?? - Adriano Carneiro
2个回答

33

是的,IDENTITY列不需要成为主键。

CREATE TABLE T
(
X INT PRIMARY KEY,
Y INT IDENTITY(1,1)
)

尽管我不确定这在什么情况下会有用。如果您有一个想要用作主键的自然键,则可能需要在代理备用键上放置唯一约束。
为了建立FK关系,SQL Server不关心列是否为PK,它只需要在该/这些列上具有唯一索引。

2
这是一个简单的方法,可以记住记录添加到表中的顺序。 - Larry Lustig
1
@Larry,所以使用默认值(getdate())创建的CreatedDate更有意义。 - Derek Kromm
@ Derek,这是真的,这也是我通常自己做的方式。然而,在某些情况下,您可能希望重新排序行(不适用于此特定问题,因为我认为SQL Server不允许您更新IDENTITY列中的值),并且可能还有其他情况下,一个简单的计数器更容易解决。 - Larry Lustig

6

使用IDENTITY关键字声明该列,而不在其上创建PRIMARY KEY约束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接