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

时间:2012-02-29 12:43:09

标签: sql sql-server sql-server-2005 tsql

这是一个SQL Server 2005 T-SQL问题。我有一个具有整数主键的表,它不是标识列。

如何获取作为唯一主键值生成的最后一个值,无论该记录是否随后被删除?

想象一下这张表:

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

片刻之后,我删除了唱片3。

但是,我现在想要计算出COL_PK列的下一个新值。我无法通过使用此查询来执行此操作:

SELECT MAX(COL_PK) + 1 FROM TABLE

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

2 个答案:

答案 0 :(得分:4)

您需要:

a)将最后生成的数字存储在另一个表中,更新每个插页并生成关键字。

b)不要在物理上删除记录,而是在其上放置某种删除的标记,将数字保存在表格中。

c)只需将其设为身份密钥......

使用(a),您需要注意“竞赛”条件,因此您不会因为一个键而尝试插入两次。

答案 1 :(得分:1)

我不认为你可以,如果它不是一个标识列......也许你应该有逻辑删除而不是物理删除,或者有一个单独的表来给你最后指定的值(这是一种常见的做法在某些业务,如保险公司等)。