Nächster Auto-Wert

31/03/2008 - 08:32 von Markus Renezeder | Report spam
Hallo Leute,

ich brauch wiedermal Eure Hilfe.

Ich möchte den nàchsten Auto-Wert einer Tabelle ermitteln.
Der Sinn ist es, die ID des Datensatzes als eine Art Artikelnummer zu
verwenden. Allerdings möchte ich nicht erst einen Datensatz speichern um
diese Nummer generieren zu können. Sie soll aber dem Benutzer beim Anlegen
des Artikels bereits angezeigt werden.

Derzeit mach ich es so:

SELECT MAX(ID) + 1 FROM myTable

Das funktioniert ja auch sowei, es sei denn, es ist noch keine Zeile in der
Tabelle (das fang ich aber ab ...). Mein Problem ist, wenn eine Zeile z. B.
mit der ID 10 erstellt wurde, ist die nàchste ID ja 11. So weit so gut ...
aber wenn ich die Zeile mit der ID 10 lösche, dann ist die letzte ID 9,
meine Abfrage würde also 10 zurückgeben ... die nàchste ID ist aber 11.

Ich such jetzt seit drei Tagen im Internet herum und lese des öffteren, dass
es nicht möglich ist, die nàchste ID zu ermitteln ... das kann ich mir aber
nicht vorstellen, denn MySQL kann es und ich behaupte einfach mal, dann
kanns MS auch ;o)

Ich verwende den MS SQL Server 2005 Express.

Danke schon mal, Markus
 

Lesen sie die antworten

#1 Elmar Boye
31/03/2008 - 09:21 | Warnen spam
Hallo Markus,

Markus Renezeder schrieb:
Ich möchte den nàchsten Auto-Wert einer Tabelle ermitteln.
Der Sinn ist es, die ID des Datensatzes als eine Art Artikelnummer zu
verwenden.



Der Sinn ist verkehrt! Autowerte sind das was sie sind,
fortlaufende vergebene Nummern ohne jeglichen Sinninhalt.

Allerdings möchte ich nicht erst einen Datensatz speichern um
diese Nummer generieren zu können. Sie soll aber dem Benutzer beim Anlegen
des Artikels bereits angezeigt werden.



Das funktioniert niemals zuverlàssig, sobald Du Dich in einer
Mehrplatzumgebung befindest. Denn sobald zwei Leute parallel
Artikel anlegen, sehen sie die gleiche Nummer - und wenn sie
sich für spàter notieren, hat zumindest einer von beiden Pech
gehabt :-(

Derzeit mach ich es so:

SELECT MAX(ID) + 1 FROM myTable



Dafür gibt es IDENT_CURRENT(N'myTable'), aber das Problem bleibt
das gleiche.

Wenn Du eine Nummer mit Sinn haben willst, lege Dir eine Tabelle
für die Nummernvergabe an - und streiche Identity aus der Spaltendefinition
bzw. verwende eine weitere Spalte für die sprechende Nummer.
Zwei Möglichkeiten dazu
<URL:http://groups.google.de/group/micro...51210b>
eine andere von Itzik Ben-Gan:
<URL:http://groups.google.com/group/micr...263b7c>

Beachte, dass Du für die zweite eine eigene Tabelle brauchst,
also nicht direkt mit myTable operieren.

Gruß Elmar

Ähnliche fragen