2011-01-11 8 views
3

Wie kann ich Letzte Zeile eingefügt, wenn in der Tabelle gibt es keine Uniqueidentifier or identity Spalte.Wie bekomme ich zuletzt eingefügte Zeile in SQL-Server

Ich warte auf Ihre gute Idee.

+1

Obwohl dies nur meine Meinung ist, glaube ich, dass jede Tabelle eine eindeutige ID haben sollte, auch wenn sie nicht von der Anwendung selbst verwendet wird. Auf diese Weise zu tun, würde Ihr Problem lösen – saret

+1

Wenn die Tabelle keine Indizes hat, können Sie nicht. Kann ich fragen, warum Sie die letzte Platte wollen? –

+1

@aret, wenn der Uniqueneidentifier verwendet wird, ist es immer noch nicht möglich, den letzten Datensatz zu erhalten –

Antwort

4

Sie benötigen eine Möglichkeit, die Reihenfolge der Zeilen zu bestimmen, um das zu bestimmen. So etwas wie ein "Erstellungsdatum" oder eine IDENTITY-Spalte.

2

Sie können nicht. Eine Tabelle besteht aus einer ungeordneten Reihe von Zeilen *. Wenn Sie beispielsweise wissen möchten, wann eine Zeile eingefügt wurde, müssen Sie diese Informationen in die Tabellendefinition einfügen (indem Sie eine neue Spalte hinzufügen) und sie entsprechend auffüllen.

* sogar angesichts eines gruppierten Index ist es gesünder, immer eine Tabelle als eine ungeordnete Reihe von Zeilen zu betrachten. Ein Clustered-Index ist nützlich, aber es garantiert keine bestimmte physikalische Reihenfolge (wie in Martins Kommentar zu dieser Antwort)

+0

Zeilen innerhalb einer einzelnen Seite sind nicht unbedingt nach gruppiertem Index sortiert Die Liste der Zeilenversätze ist aber die Offsets selbst können außer Betrieb sein. Dh wenn eine ganze Seite Zeilen mit den Schlüsselwerten '1,2,3,5,6' hat und dann' 1' gelöscht wird und '4' eingefügt wird, wird die ganze Seite nicht reorganisiert, sondern nur' 4' wo ' 1 war und aktualisieren die Liste der Zeilen-Offsets. –

+0

@Martin - natürlich hast du recht. Ich habe mich geirrt. –

0

Glauben Sie nicht, dass Sie können. Sie benötigen eine Art von Kennung, um Daten zu extrahieren. ID, DateTime .. alles, was immer anders sein wird als die anderen.

2

Wenn Sie die letzte Zeile aus der Tabelle ohne uniqueIdentifier oder Identität abrufen möchten, können Sie insert trigger verwenden.

+0

+1 gute Idee, das war der erste Gedanke kam mir in den Sinn. –

-1
DECLARE @IDs TABLE(id int) 

insert into TableName(TableID, TableRowValue) 
output inserted.TableID into @IDs 
values(857, 'Test'); 

- Die eingegebene Identität in dem @IDs Tabellenvariable

+0

Wenn dies der Kontext der Frage wäre, würden Sie nicht einmal die Ausgabetabelle benötigen, oder? – RichardTheKiwi

0

sein, wenn Sie etwas von gespeicherten Prozedur fügen Sie SELECT SCOPE_IDENTITY verwenden sollen(), die den letzten Identitätswert in der aktuellen Sitzung erstellt wird zurückkehren, aber es wird es auch auf Ihren aktuellen Umfang beschränken. Durch diese Verwendung erhalten Sie nicht zuletzt eingefügt Identität, die durch Trigger verursacht werden kann.

Haben Sie das im Hinterkopf, wenn Sie das Ergebnis für den Vorgang des Einfügens in derselben oder einer aufgerufenen Prozedur verwenden wollen.

Verwandte Themen