sql - 如何在不插入sql server记录的情况下知道表的下一个主键值?

标签 sql sql-server sql-server-2008 sql-server-2005 c#-4.0

我的项目中有一些东西需要在字段中显示下一个主键而不物理插入记录?

如何在不插入记录的情况下知道主键的下一个值?

即 让我们有 10 条记录,以 ID 列作为主键。 现在我已经删除了第 10 条记录,因此下一个值为 11。

我想知道下一个主键的值(在我的例子中是 11),而不需要在表中物理插入记录。

简而言之,主键 future 的下一个值。

我怎样才能得到它?

请提供解决方案。

最佳答案

编辑(非常重要)

需要注意的是,该方法可以用来预测下一个id,但不保证该值。其原因是正如 @marc_s 在注释中提到的,在您请求该值的时间和您使用该值的时间之间,另一个事务可能已插入到该表中,从而使检索到的值的假设无效。

如上所述,如果您的实现基于这样的假设,那么您就犯了一些设计错误,并且应该首先考虑重新设计此解决方案。

来自IDENT_CURRENT (Transact-SQL)

Returns the last identity value generated for a specified table or view. The last identity value generated can be for any session and any scope.

看看下面的例子

CREATE TABLE #Table (
        ID INT IDENTITY(1,1),
        Val INT
)

INSERT INTO #Table SELECT 1
INSERT INTO #Table SELECT 2
INSERT INTO #Table SELECT 3

SELECT * FROM #Table

DELETE FROM #Table WHERE ID >= 2

SELECT * FROM #Table

SELECT IDENT_CURRENT('#Table')

DROP TABLE #Table

关于sql - 如何在不插入sql server记录的情况下知道表的下一个主键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612580/

相关文章:

java - 在 sql2o 中插入时出错

sql-server - 如何在 T-SQL 表值函数中切换语言

sql - 在存储过程中将查询作为参数传递

sql - 使用不同的命令

sql - 在 sql server 2008 中备份数据库中的单个表及其数据

mysql - 错误代码 : 1093. 您无法在 FROM 子句中指定用于更新的目标表 'schedule'

mysql - 如何在 Excel CSV 中保留日期和引号的 SQL 格式?

mysql - 如何为 sum() 输出多条记录

如果使用存储过程,是否需要 PHP PDO PARAMS?

SQL Server : row present in one query, 在另一个中丢失