为什么SQL Server不允许在一个表中有多个IDENTITY列?是否有特定的原因?
为什么SQL Server不允许在一个表中有多个IDENTITY列?是否有特定的原因?
为什么需要它?SQL Server会为每个带有IDENTITY
列的表跟踪单个值(当前标识值),因此每个表只能有一个标识列。
SQL Server将标识存储在内部表中,使用表的ID作为其键。因此,SQL Server不可能在一个表中有多个Identity列。
因为微软意识到超过80%的用户只需要每个表格一个自增列,而要创建第二个(或更多)的解决方法很简单,即创建一个种子为1、增量为1的IDENTITY,然后创建一个计算列,将自动生成的值乘以一个因子来改变增量,并加上偏移量来改变种子。
身份列用于唯一标识表中的单个行。如果您希望其他列也是唯一的,可以为每个可能需要的“身份”列创建一个唯一索引。
我一直认为这是 SQL Server 的一个任意且不好的限制。是的,你只想要一个标识列来实际标识一行,但有合理的理由让数据库自动生成多个字段的数字。
这就是 Oracle 中序列的好处。它们不与表绑定。您可以使用几个不同的序列来填充同一张表中尽可能多的字段。您也可以让多个表共享同一个序列,虽然这可能是一个非常糟糕的决定。但重点是您可以这样做。它更加精细并且给您更多的灵活性。
序列的不好之处在于您必须编写代码来实际递增它们,无论是在插入语句中还是在表上的 on-insert 触发器中。SQL Server identity 的好处在于,您只需更改属性或添加关键字到您的表创建中,就完成了。