ami*_*tel 5 sql sql-server sql-server-2005 sql-server-2008 c#-4.0
我的项目中有一些东西,我需要在字段中显示下一个主键而不在物理上插入记录?
如何在不插入记录的情况下知道主键的下一个值?
即,Lets有10条记录,ID列为主键.现在我删除了第10条记录,所以下一个值将是11.
我想知道下一个主键的值(在我的情况下为11),而不是在表中物理地插入记录.
简而言之,未来下一个主键的价值.
我该怎么办?
请提供解决方案.
编辑(非常重要)
应该注意的是,此方法可用于预测下一个id,但不会保证此值.这样做的原因是注释中提到的@marc_s,在您请求值的时间和使用它的时间之间,另一个事务可能已插入此表,使得检索的值的假设为null和void.
如上所述,如果您的实现基于这样的假设,那么您已经犯了一些设计错误,并且应该将此解决方案重新作为第一优先级.
返回为指定表或视图生成的最后一个标识值.生成的最后一个标识值可以用于任何会话和任何范围.
看看下面的例子
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
Run Code Online (Sandbox Code Playgroud)
你问的其实没有意义。数据库设计为支持多重访问,因此即使有一种方法可以在不插入记录的情况下确定下一个主键身份,也不能保证另一个连接不会写入该表并在下一个事务完成之前声明该身份。如果您在想“好吧,我可以锁定它”,那么您基本上已经排除了任何可能的情况,在这种情况下,了解未来的身份密钥可能会对您有所帮助。
那么您想要未来身份密钥的理由是什么?
| 归档时间: |
|
| 查看次数: |
19682 次 |
| 最近记录: |