2009-08-25 15 views
0

Was wäre das korrekte universelle SQL-Konstrukt, um die letzte Zeile einzufügen (oder den Primärschlüssel)? Die ID könnte automatisch von einer Sequenz generiert werden, aber ich möchte die Sequenz überhaupt nicht behandeln! Ich muss die ID erhalten, indem ich die Tabelle abfrage. Alternativ könnte INSERT irgendwie erweitert werden, um die ID zurückzugeben. Angenommen, ich füge immer eine einzelne Zeile ein. Die Lösung sollte mit den meisten RDBMS funktionieren!Universelles SQL-Konstrukt zum Abrufen der zuletzt eingefügten Zeile

+4

Es gibt keine universelle Lösung, außer einen Zeitstempel aus der Addition –

+0

ich mit einer Lösung mit hsqldb, postgresql, SQL Server 2005, Oracle, MySQL und DB2 –

Antwort

2

der beste Weg ist, auf der Sequenz abhängen wie:

select Max(ID) from tableName 

aber Wenn Sie nicht damit umgehen wollen, können Sie neue Timestamp-Spalte zu Ihrer Tabelle hinzufügen und dann max wählen Sie aus dieser Spalte .

wie auf diese Weise

select Max(TimestampField) from tableName 
+0

einen Service zufrieden sein würde hinzufügen Timestamp ist keine Option für mich. Meine App darf die Tabellenstruktur nicht ändern. –

+0

Die Sequenzlösung funktioniert für mich. Es ist wahrscheinlich erwähnenswert Max (ID) wird ein falsches Ergebnis liefern, wenn Ihre Sequenz rollt (Zyklen über). In meinem Fall ist das irrelevant. Vielen Dank. –

+0

Sie müssen sicherstellen, dass Ihre Isolationsstufe so ist, dass Sie keine IDs sehen, die von anderen Transaktionen eingefügt wurden. Und max (TimeStampField) erfordert, dass Schreibvorgänge nicht zu oft kommen, so dass keine zwei Schreibvorgänge innerhalb der Auflösung dieses Feldes sind. –

Verwandte Themen