Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql-Statement für kleinste nicht vorhanden Nummer (https://www.delphipraxis.net/10379-sql-statement-fuer-kleinste-nicht-vorhanden-nummer.html)

Leuselator 17. Okt 2003 12:39

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
ist zwar nicht die "reine Lehre" aber vielleicht ein brauchbarer Ansatz, falls Deine DB keine Trigger, wohl aber Subselects unterstützt:
SQL-Code:
Insert into TabellenName
(ID, MeinZahlWert, MeinCharWert)
select max(ID)+1,
       4711 as MeinZahlwert,
       'NurEinBeispiel' as MeinCharWert
  from Tabellenname
Gruß

Wormid 17. Okt 2003 12:40

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Wenn Du es mit simplem sql lösen willst, dann würde ich vorher mal folgendes Statement absetzen:

SQL-Code:
SELECT MAX(id) FROM name_der_tabelle
Damit wird Dir dann die bisher größte vergebene id ausgegeben... Da mal fix ne 1 hinzuaddiert, und schon bist Du fertig.

Allerdings haben so gut wie alle Datenbanken einen Typen wie "autoincrement" oder sowas, was spricht denn gegen den? Warum willst Du das manuell machen?

Gruß

Wormid

Sharky 17. Okt 2003 12:43

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Hai barnti,

überlege doch mal ob es nicht einfacher ist anstelle einer nummerichen ID eine GUID zu verwenden.

Tanadirian 17. Okt 2003 12:43

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Ich hab ihn so verstanden das er die kleinste frei ID sucht! :gruebel:
Nicht einfach die nächstgrößte.

r_kerber 17. Okt 2003 12:47

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Zitat:

Zitat von Sharky
überlege doch mal ob es nicht einfacher ist anstelle einer nummerichen ID eine GUID zu verwenden.

Als Primärschlüssel eine Zeichenkette?....
Zitat:

Zitat von Tanadirian
Ich hab ihn so verstanden das er die kleinste frei ID sucht!

Stimmt. Wer lesen kann ist klar im Vorteil. :oops: :oops: :oops:

Wormid 17. Okt 2003 12:50

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Etwas suchen, was NICHT da ist, ist aber gar nicht so einfach... Ich wüsste nicht, ob das mit einem SQL-Statement überhaupt geht. Ich denke, da müsste man dann entweder zusätzlich eine Tabelle mit freien IDs pflegen, oder irgendwie Schleifen-Logic in die Application einbauen, die in einem Loop die erste freie ID sucht. (Achtung... langsaaaaaam)

Ich immer eh davon abraten, einmal gelöschte IDs später wieder zu vergeben. Sicher ist sicher.


Gruß

Wormid

r_kerber 17. Okt 2003 13:06

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Zitat:

Zitat von Wormid
Ich immer eh davon abraten, einmal gelöschte IDs später wieder zu vergeben. Sicher ist sicher.

Dem kann ich mich nur anschließen!

Sharky 17. Okt 2003 14:04

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von Sharky
überlege doch mal ob es nicht einfacher ist anstelle einer nummerichen ID eine GUID zu verwenden.

Als Primärschlüssel eine Zeichenkette?....

Warum nicht? Meinst Du es geht zu sehr auf die Geschwindigkeit?
Mir ist noch nichts aufgefallen (allerdings ist die Datenbank auch nicht riesen groß)

woki 17. Okt 2003 14:07

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Hallo barnti,

ich möchte vorsichtshalber nochmal etwas deutlicher warnen: Deine Lösungsidee, für die du eine Implementation suchst, löst nicht dein Problem, also liefert nicht das, was man braucht um einen Datensatz jetzt und in alle Zukunft eindeutig zu identifieren. Wenn Du auf einer ID, die einfach die kleinste zur Zeit nicht verwendete Zahl einer z.b. Integer Spalte ist, z.B. Relationen aufbaust, wird das gnadenlos knallen.

Erstens muß Du sicher stellen, das deine ID eindeutig ist (in einer Multiuser-Umgebung ist das nicht so einfach wie es sich anhört), zweitens mußt du sicher stellen, daß eine schon mal verwendete ID nie wieder verwendet wird, auch wenn der Datensatz gelöscht wurde.

Ich kenne eigentlich keine Datenbank, die diesen Namen verdient, und die keinen Mechanismus dafür zur Verfügung stellt, nämlich entweder Autoincrementfelder oder eine Generator (auch wenn der dann eventuell anders heißt, z.B. sequence (Oracle siehe oben)).

Grüsse
Woki

woki 17. Okt 2003 14:17

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von r_kerber
Zitat:

Zitat von Sharky
überlege doch mal ob es nicht einfacher ist anstelle einer nummerichen ID eine GUID zu verwenden.

Als Primärschlüssel eine Zeichenkette?....

Warum nicht? Meinst Du es geht zu sehr auf die Geschwindigkeit?
Mir ist noch nichts aufgefallen (allerdings ist die Datenbank auch nicht riesen groß)

Immer dann, wenn ein round trip zur Datenbank schmerzhaft oder unmöglich ist, bietet sich die Verwendung von Guids als Alternative zu buchungskreisen an, um eine eindutige ID zu erhalten, und hat da auch Verbreitung gefunden. Nachteil sind aber schon Performance und Datenmenge, das muß man im Einzellfall prüfen.

Grüsse
Woki


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.
Seite 2 von 3     12 3      

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