使用T-SQL如何获取主键字段中生成的最后一个值?

3

这是一个关于 SQL Server 2005 T-SQL 的问题。我有一张表,它有一个整型主键,但不是标识列。

如何获取最后一次生成的唯一主键值,而不管该记录是否被删除?

想象一下这张表:

TABLE
COL_PK    VALUE1  VALUE2
1         FDSF    RWERWE
2         SDSS    £$£$£
3         FDFSD   ))FFFFFF

稍后,我将删除第三条记录。

然而,现在我想计算COL_PK列的下一个新值。但是我不能使用这个查询:

SELECT MAX(COL_PK) + 1 FROM TABLE

由于这将计算3 - 这不是下一个PK值。我如何获得4 - 下一个新的Pk值?


2
SCOPE_IDENTITY - Tim Schmelter
2
@Tim "...这不是一个标识列..." - Marc Gravell
5
但是,这确实引出一个问题:为什么它不是身份列?解决这个问题就是身份列存在的原因。对当前值进行任何检查都会存在竞态条件。我的建议是使用 IDENTITY,并且如注释所述,使用 SCOPE_IDENTITY() - Marc Gravell
2个回答

4
您需要做以下几点:
a) 在另一个表中存储最后生成的数字,在每次插入时更新,并以此生成您的键。
b) 不要物理删除记录,而是在其上设置某种删除标志,并在表中保留您的数字。
c) 只需将其作为身份密钥...
使用(a)时,您需要小心“竞争”条件,以免出现两个尝试插入一个键的情况。

2
+1:不确定为什么你会使用除了使用IDENTITY列(选项c)之外的其他方法,然后调用SCOPE_IDENTTY()来查找最后插入的值。 - MatBailie

1

我认为如果它不是标识列,你就不能这样做...也许你应该使用逻辑删除而不是物理删除,或者拥有一个单独的表来提供最后分配的值(在一些像保险公司之类的业务中,这是一个常见的做法)。


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