为什么一个 SQL Server 表不能有多个标识列?
CREATE TABLE t(id INT IDENTITY, id2 INT IDENTITY)
消息 2744,级别 16,状态 2,第 5 行为
表“t”指定了多个标识列。
每个表只允许一个标识列。
我知道我们可以使用计算列来解决它。
根据产品文档,一个表不能有多个标识列。但为什么?其背后的真正原因是什么?
为什么一个 SQL Server 表不能有多个标识列?
CREATE TABLE t(id INT IDENTITY, id2 INT IDENTITY)
消息 2744,级别 16,状态 2,第 5 行为
表“t”指定了多个标识列。
每个表只允许一个标识列。
我知道我们可以使用计算列来解决它。
根据产品文档,一个表不能有多个标识列。但为什么?其背后的真正原因是什么?
我认为没有任何真正的“内部”原因。元数据存储在列级别而不是表级别。它需要重新考虑标量函数(例如
scope_identity()
,伪列语法),例如$identity
现在存在歧义。从哲学上讲,如果目的
identity
是生成唯一标识实体的东西,为什么您需要两个不同的任意计算值充当该角色?无论如何,好处在哪里?这是一个跨站点欺骗,所以我将重复我的示例 SO。
从 SQL Server 2012 开始,您可以将自己淘汰并使用序列默认值添加尽可能多的列到表中。例如:
您可以改用计算列,从某个值加上 id 值开始: