2016-10-13 2 views
1

I wie unten erstellte Tabelle haben zu finden:Wie zuletzt eingefügten Zeile in SQL Server ohne Identitätsspalte

create table EmployeeDetails 
(
    id int, 
    name varchar(50), 
    designation varchar(50), 
    ReportingTo int 
) 

Und eingefügten Zeilen wie folgt aus:

insert into EmployeeDetails values(1, 'A', 'Developer', 3) 
insert into EmployeeDetails values(5, 'E', 'CEO', 5) 
insert into EmployeeDetails values(2, 'B', 'Developer', 3) 
insert into EmployeeDetails values(3, 'C', 'Manager', 4) 
insert into EmployeeDetails values(4, 'D', 'S.Manager', 5) 

Meine Frage ist: Wie kann ich mich identifizieren die letzte eingefügte Zeile in der Tabelle?

Gebrauchte Anfragen:

select IDENT_CURRENT('EmployeeDetails') 
Select SCOPE_IDENTITY() 

Aber ich habe immer noch keine Antwort finden.

Antworten sind immer willkommen

+0

Also, was sind für Sie zu fragen? MySQL, MSSQL oder SQLite? – squillman

+0

Ich habe die inkompatiblen Datenbank-Tags entfernt. Markieren Sie Ihre Frage mit der Datenbank, die Sie wirklich verwenden. –

+0

Welche DBMS verwenden Sie? Zu viele Produkte getaggt ... – jarlh

Antwort

3

hinzufügen Felder vom Typ Datetime mit dem Namen ErstellDat und UpdateDate in der Tabelle, wenn Sie Datensatz in der Tabelle einfügen setzen ihren Wert für getdate()

Danach können Sie Abfragen ausführen können:

Select top 10 * from YourTable Order By CreateDate DESC 

Oder letzte

aktualisiert
Select top 10 * from YourTable Order By UpdateDate DESC 
5

Das ist zu lang für einen Kommentar.

Sie haben ein grundlegendes Missverständnis von Tabellen in relationalen Datenbanken. Sie repräsentieren ungeordnete Sets. Es gibt also keine "letzte Zeile" in einer Tabelle. Die Informationen zur Reihenfolge der Zeilen müssen beim Erstellen der Tabelle und/oder dem Laden von Daten in die Tabelle enthalten sein.

In SQL Server ist die einfachste Methode eine Identitätsspalte. Deshalb sind viele Tabellen sind wie folgt definiert:

create table EmployeeDetails (
    id int identity primary key, 
    name varchar(50), 
    designation varchar(50), 
    ReportingTo int 
); 

Sie auch Standard-Einführungszeitspalten hinzufügen:

create table EmployeeDetails (
    id int identity primary key, 
    name varchar(50), 
    designation varchar(50), 
    ReportingTo int, 
    CreatedAt datetime default gettime() 
); 

Sie können jedoch mehrere Zeilen mit demselben datetime Wert haben.

3

Sie können auch rowversion wie unten verwenden, wenn Sie

CREATE TABLE MyTest (myKey int 
    ,myValue int, RV rowversion); 
GO 
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0); 
GO 
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0); 

select * from mytest order by rv desc 

Hinweis eine Spalte hinzufügen:
Dies ist immer die letzte Zeile geben eingefügt/aktualisiert

Referenzen:
rowversion

+0

@LJ: das ist richtig, aktualisiert – TheGameiswar

+0

Bitte geben Sie die Quellenangabe zu Ihrem Code: https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion- transact-sql – Tanner

+1

@Tanner: Habe es getan, ich mache das immer, aber nicht sicher, warum ich in diesem Fall – TheGameiswar

1

Finden Sie meine Antwort wie folgt. Hoffe das kann dir helfen.

Fügen Sie eine weitere Spalte hinzu, um Datensatzerstellungsdatum/-zeit wie folgt zu speichern.

create table EmployeeDetails 
(
id int, 
name varchar(50), 
designation varchar(50), 
ReportingTo int, 
CreatedOn datetime 
) 

Nach Erstellung von Tabellen und Einfügen von Datensätzen schreiben/Abfrage ausführen (hier innere Abfrage verwendet wird), wie unten

select 
* 
from EmployeeDetails 
where CreatedOn = (select max(CreatedOn) from EmployeeDetails) 
Verwandte Themen