我想知道如何检索最后只有一个标识在Sql Server 即(n-1)
。我可以得到@identity-1
。我的问题是,当前一个是删除整个计算将是错误的。请帮助。如何检索SQL Server中的最后一个标识?
0
A
回答
1
如果你想获得表的最大身份那么你应该使用
Select Max(IdentityColumn) from YourTable
如果你希望得到您的列的最后一个标识那么你应该使用
SELECT TOP(1) IdentityColumn FROM YourTable ORDER BY IdentityColumn DESC
2
我想你正试图找到第二个下一个最大值你的表的标识列。查询为:
Select max(identityColumnName) from [tablename] where identityColumnName
not in (select max(identityColumnName) from [tablename])
1
这是另一种方法,但我相信达米安是正确的,你是tter describ实际的问题,因为越来越标识列的第二个最后的值可能不是解决办法:
SELECT TOP 1 IdentityColumn
FROM
(
SELECT TOP 2 IdentityColumn
FROM YourTable
ORDER BY IdentityColumn DESC
) t
ORDER BY IdentityColumn
1
只得到倒数第二个标识,您也可以使用LAG或铅结合TOP。
请注意,这是假定ID是由IDENTITY自动填充的INT。
当ID是uniqueidentifier(又名Guid)时,对它进行排序并不意味着最大值给出了最后创建的记录。
例如:使用具有的身份的表
declare @T table (id int identity(1,1), value varchar(30));
insert into @T (value) values
('A'),('B'),('C'),('D'),('E');
select top 1
lag(id) over (order by id) as BeforeTheLastId
from @T
order by id desc;
select top 1
lead(id) over (order by id desc) as BeforeTheLastId
from @T
order by id desc;
-- But to get the last Id, a max will do
select max(id) as LastId from @T;
邮政scriptum测试:
IF OBJECT_ID('tempdb..#tmpTest') IS NOT NULL DROP TABLE #tmpTest;
create table #tmpTest (id int identity(1,1) primary key, value varchar(30), createdOn datetime2 default SYSDATETIME());
insert into #tmpTest (value) values ('A'),('B'),('C'),('D');
declare @MaxIdBeforeInsert int;
select @MaxIdBeforeInsert = max(id) from #tmpTest;
insert into #tmpTest (value) values('E');
select * from #tmpTest;
select
IDENT_CURRENT('tempdb..#tmpTest') as CurrentIdentity,
@@IDENTITY as IdentityVar,
SCOPE_IDENTITY() as ScopeIdentity,
@MaxIdBeforeInsert as MaxIdBeforeInsert;
0
表中的当前标识可以通过SELECT IDENT_CURRENT('<YourTableName>')
作为检索例如,如果您想要第二个最大标识,则需要以下代码:
SELECT ISNULL(IDENT_CURRENT('<YourTableName>'), 1)-1
相关问题
- 1. 从SQL Server数据库表中检索最后一个id
- 2. 检索SQL Server 2008中的最后n个记录
- 3. 如何检索SQL Server中最近几个小时的记录
- 4. 检索SQL Server表的最后一条记录
- 5. SQL查询检索唯一标识符
- 6. 如何检索最后一个键的检索次数?
- 7. 如何检索插入触发器中的标识列值SQL Server
- 8. SQL Server 2012获取表中没有唯一标识符的最后一行
- 9. 检索sql的最后一条记录
- 10. 如何检索MS-Access中的最后一个自动增量值,例如Sql Server中的@@ Identity
- 11. 如何获取PHP中的最后一个插入的标识
- 12. SQL:获取每个唯一标识的最后一行
- 13. SQL Server上个月的最后一天
- 14. 如何获得一个月(SQL Server)的最后一天
- 15. SQL Server的最大值检索
- 16. 如何从特定行到最后一个记录检索SQL中的数据
- 17. 如何检索Castle ActiveRecord中的最后一个插入ID?
- 18. SQL检索sql查询中的最后一条记录
- 19. 如何通过标识删除SQL Server中的一行?
- 20. 如何获取并锁定下一个标识值SQL Server
- 21. 如何从SQL Server数据库中检索最大输入值?
- 22. 检索最后插入记录的ID在SQL Server CE 4
- 23. 如何替换SQL Server中列的第一个和最后一个字符?
- 24. SQL Server:唯一标识符上的ISNULL
- 25. 如何检索SQL Server中同一列的多行的值
- 26. 如何将具有标识的一个表复制到另一个SQL Server
- 27. 如何根据SQL中的多个公共标识符检索行
- 28. 如何检索SQL Server中的XML节点的多个值2008
- 29. 如何在C#中使用XPath检索最后一个节点?
- 30. 如何从SQLite中检索最后一个_ID
无论你试图解决什么*问题,试图获得“最后一个身份”并不是解决方案。你能概述你想要处理的更广泛的问题吗? –
我认为你的用例Kapil的答案是匹配 –