![]() |
Sql-Statement für kleinste nicht vorhanden Nummer
Hallo Alle,
ich versuche für eine Tabelle eine ID zu generieren. Dazu möchte ich die kleinste noch nicht vorhandene ID für den neuen Eintrag vergeben. Wie kann ich das effizient in ein SQL-Statement umsetzen? Danke für eure Ideen, Gruß, Barnti |
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Üblicherweise macht man das mit einem Before-Insert-Trigger.
|
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Aha,
kannst Du das etwas ausführlicher erläutern. So kannn ich mit Deiner Antwort leider nicht viel anfangen... Gruß, Barnti |
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Das war mir schon klar. 8) Aber das ist zu kompliziert, um es in einem Satz zu erklären, deshalb hab ich Dir das Stichwort "Trigger" gegeben. Das ist eine DB-Funktion, die praktisch im Hintergrund nur darauf wartet, etwas tun zu dürfen. In dem Zusammenhang kommen auch Generatoren ins Spiel. Der Trigger setzt den Generatorwert (das ist die gewünschte ID) um eins hoch. Hört sich kompliziert an, so schlimm ists aber gar nicht. Ich empfehle Dir hierzu den Kurs von Paul Jr., frage mich aber nicht wo der ist. Mußt suchen.
|
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Du kannst es auch umständlich machen! Mit einer Abfrage und einer Schleife :wink:
SQL-Code:
damit bekommst du die Werte der ID-Spalte schon geordnet (aufsteigend!?)
select ID as ID from Table1
Delphi-Quellcode:
i:=1;
repeat if i <>query1.fieldbyname('ID').asinteger then break; (*Mit dem "<>" bin ich mir nicht ganz sicher kann auch nur "<" sein*) i:=i+1; query1.next; until i=query1.recordcount+1;//damit die Schleife auch mal endet //jetzt ist i der kleinste ID-Wert der fehlt Das Beispiel geht natürlich davon aus das deine ID's bei 1 anfangen! |
Re: Sql-Statement für kleinste nicht vorhanden Nummer
@Hansa: Nicht jede Datenbank kennt Generatoren!
@Tanadirian: Und was machst Du, wenn während Du suchst, Datensätze gelöscht oder hinzugefügt werden werden? |
Re: Sql-Statement für kleinste nicht vorhanden Nummer
@r_kerber: Man kann in diesem Fall doch am Ende die Recordcounts von Query1 und Table1 vergleichen und wenn sie nicht übereinstimmen muß man halt das Ganze nochmal machen. (Ich hoffe du meintest das, ansonsten versteh ich deine Frage nicht :oops: )
|
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Was hältst Du dann von einer Tabelle, in der die ID geführt wird. Im Insert-Trigger wird dann transaktionssicher die nächste ID ermitteln. Dies im Client-Programm machen zu wollen, halte ich für ungünstig!
|
Re: Sql-Statement für kleinste nicht vorhanden Nummer
So fit bin ich leider auch noch nicht in SQL :(
|
Re: Sql-Statement für kleinste nicht vorhanden Nummer
Alternativ kann mann auch einen Generator (Interbase) oder Sequence (Oracle) verwenden oder für ID einen AutoInc-Datentyp (z.B. Seriell in Informix) verwenden! Damit bist Du dann aber abhängig von der Datenbank!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz