Ich möchte wissen, wie kann ich die vorletzte Identität in Sql Server das ist (n-1)
. Ich kann @identity-1
bekommen. Mein Problem ist, wenn vorherige gelöscht ist, wird die gesamte Berechnung falsch sein. Bitte helfen Sie dabei.Wie kann ich die vorletzte Identität in SQL Server abrufen?
Antwort
Wenn Sie die maximale Identität der Tabelle erhalten möchten, dann sollten Sie
Select Max(IdentityColumn) from YourTable
verwenden Wenn Sie die letzte Identität Ihrer Spalte, die Sie erhalten möchten, dann sollte verwenden
Ich denke, Sie versuchen, die zweite nächste maximale Wert Ihrer Identitätsspalte einer Tabelle zu finden. Abfrage für diesen:
Select max(identityColumnName) from [tablename] where identityColumnName
not in (select max(identityColumnName) from [tablename])
Hier ist eine andere Möglichkeit, es zu tun, aber ich glaube, Damien ist richtig und du bist tter describ das eigentliche Problem, da die 2. letzte Wert einer Identitätsspalte bekommen ist wahrscheinlich nicht die Lösung:
SELECT TOP 1 IdentityColumn
FROM
(
SELECT TOP 2 IdentityColumn
FROM YourTable
ORDER BY IdentityColumn DESC
) t
ORDER BY IdentityColumn
Um nur den vorletzten Kennung, könnten Sie auch mit TOP LAG oder LEAD in Kombination verwendet werden.
Beachten Sie, dass dabei davon ausgegangen wird, dass es sich bei der ID um eine INT handelt, die von IDENTITY automatisch ausgefüllt wird.
Wenn die ID uniqueidentifier (alias Guid) ist, dann bedeutet das nicht, dass der Höchstwert den zuletzt erstellten Datensatz enthält.
Zum Beispiel:
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;
Post Scriptum Test unter Verwendung einer Tabelle, die eine Identität hat:
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;
Die aktuelle Identität der Tabelle kann durch SELECT IDENT_CURRENT('<YourTableName>')
Wie abgerufen werden So, Sie benötigen die unten, wenn Sie die zweite maximale Identität wollen:
SELECT ISNULL(IDENT_CURRENT('<YourTableName>'), 1)-1
- 1. SQL Server: Identität einfügen
- 2. SQL Server Identität Problem
- 3. SQL Server Identität
- 4. Identität automatisches Springen in SQL Server LocalDb
- 5. Wie kann ich die Identität manuell einfügen?
- 6. SQL Server CE 3.5 Identität Einsatz
- 7. SQL Server: Identität bei jeder Löschaktion zurücksetzen
- 8. Wie kann ich T-SQL PRINT-Anweisungen in SQL Server Profiler-Traces abrufen?
- 9. Die Datensätze aus SQL Server nicht abrufen
- 10. Wie kann ich die Identitätseigenschaft in SQL Server 2008 ändern?
- 11. "Einfügen" neue Zeile mit der niedrigsten Identität in SQL Server
- 12. Wie finde ich die vorletzte Ziffer einer sechsstelligen Nummer?
- 13. Inkrementieren Sie eine Spalte ohne Identität in sql-server
- 14. Abrufen des aktuellen Datums in SQL Server?
- 15. Wie kann ich SQL Server zwingen
- 16. T-Sql @@ Identität
- 17. Get Identität von mehreren Einfügung in SQL Server 2008
- 18. Wie kann ich SQL Server-Datenbankdiagramme scripten?
- 19. Wie kann ich SQL Server verbessern Spiegelung
- 20. SQL Server 2008 - Tabelleneinschränkungen abrufen
- 21. Wie kann ich SQL Server Instanzen installieren?
- 22. Identität Einstellung ein- oder ausgeschaltet in SQL Server
- 23. Was ist Identity-Spalte in SQL Server? und was sind die Arten von Identität in SQL Server?
- 24. zurück die vorletzte Listenelement in gemeinsamen lisp
- 25. Die Position des XML-Elements in SQL Server 2012 abrufen
- 26. Abrufen der aktuellen Systemzeit in SQL Server
- 27. abrufen Sortiert Spalte Wert in SQL Server
- 28. Wie kann ich den Datentyp einer Spalte in SQL Server abrufen?
- 29. SQL Server - Wie kann ich eine aufsteigende Aufwärtszählung jedes Werts in einer Tabelle pro Zeile abrufen?
- 30. Wie kann ich gelöschte Zeilen in Sql Server 2014 Management Studio abrufen?
Was auch immer * Problem * Sie versuchen zu lösen, ist der Versuch, "vorletzte Identität" zu erhalten, nicht die Lösung. Können Sie das * breitere * Problem beschreiben, mit dem Sie umgehen möchten? –
Ich denke für Ihren Anwendungsfall ist Kapils Antwort Übereinstimmung –