使用触发器模拟SQL Server 2005中的第二个标识列

Pro*_*ofK 1 sql-server

除了标识列PK之外,我还有各种各样的原因需要在SQL Server 2005数据库中实现第二个并发安全的自动递增列.能够拥有多个标识列是理想的,但我正在寻找使用触发器来尽可能接近金属模拟它.

我相信我必须在触发器中使用可序列化的隔离级别事务.我会这样做,就像Ii会在普通的SQL查询中使用这样的事务吗?

不可协商的要求是第二个递增列的商业含义与第一个PK递增列的幕后含义保持分离.

为了尽可能简单地放置东西,如果我创建了JobCards'0001','0002'和'0003',然后删除JobCards'0002'和'0003',我创建的下一张Jobcard必须有ID'0002',而不是'0004'.

Stu*_*tLC 6

只是一个想法,如果你有2个"同一性"列,那么它们肯定会"同步" - 如果不是完全相同的值,那么将会有一个不变的值.如果是这样,那么为什么不将"第二个身份"列添加为COMPUTED列,这会抵消主要身份?或者我的逻辑是否存在缺陷?

编辑:根据马丁的评论,请注意您的计算可能需要N*id + C,其中N是增量,C是偏移/增量 - 请原谅我生锈的数学.

例如:

ALTER TABLE MyTable ADD OtherIdentity AS Id * 2 + 1;
Run Code Online (Sandbox Code Playgroud)

编辑 请注意,对于Sql 2012及更高版本,您现在可以使用独立序列在同一个表中创建两个或多个独立递增列.

注意:OP编辑了原始要求以包括回收序列(注意SQL中的标识列一旦删除就不回收使用过的ID).