我想知道如何檢索最後只有一個標識在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的答案是匹配 –