Hi,
Ich habe da ein kleines Problem, ich habe eine Datenbank, in der verschiedene Nummern vergeben sind (leider als 10-stelliger String beginnend mit"4", das ist dann nochmal eine extra Schwierigkeit), und nun suche ich für die Generierung eines neuen Datensatzes eine Nummer, die noch nicht existiert. Wegen entsprechender Vorgaben (weil zwischendurch gelöschte wiederverwendet werden können) kann ich aber nicht einfach die größte Nummer +1 nehmen (davon abgesehen, dass Transact-SQL sich weigert eine 10-stellige Zifernfolge in eine Zahl umzuwandeln um 1 darauf zu addieren). Nun wollte ich nachfragen, ob es in SQL eine einfache Möglichkeit gibt, sich Strings generieren zu lassen, die einem bestimmten Muster folgen und in einer gegebenen Liste NICHT auftauchen.
Als Neuling kommt mir erstmal die Idee, eine Tabelle mit allen möglichen Nummern aufzubauen, in der die belegten markiert sind, sozusagen als FreeMem-Liste dann kann ich suchen, welche in der einen Tabelle sind, aber nicht in der anderen; bei 10-stelligen Nummern, selbst wenn die erste Ziffer feststeht, hätte ich aber dann immer noch eine Datenbank von 1 Milliarde Einträgen, und das scheint mir dann doch etwas übertrieben, wenn man "nur" im Bereich von wenigen Tausend Nummern verwalten will. Eine andere Möglichkeit wäre, per VB in eine Schleife alle Nummern zu überprüfen, bis eine nicht existente gefunden wird, aber davon abgesehen, dass die Laufzeit dann von dem Füllstand der Datenbank abhängt, dauert das auch bei entsprechendem Füllstand grundsätzlich zu lange, als dass man es dem User zumuten könnte, deshalb hoffe ich, dass ich diese Arbeit durch eine SQL-Abfrage dem SQL-Server aufbürden kann.
Ich hoffe, dass jemand, der etwas mehr Ahnung von SQL hat, hier die richtige Idee hat.
Schon mal danke
Martin Dietz
Ich habe da ein kleines Problem, ich habe eine Datenbank, in der verschiedene Nummern vergeben sind (leider als 10-stelliger String beginnend mit"4", das ist dann nochmal eine extra Schwierigkeit), und nun suche ich für die Generierung eines neuen Datensatzes eine Nummer, die noch nicht existiert. Wegen entsprechender Vorgaben (weil zwischendurch gelöschte wiederverwendet werden können) kann ich aber nicht einfach die größte Nummer +1 nehmen (davon abgesehen, dass Transact-SQL sich weigert eine 10-stellige Zifernfolge in eine Zahl umzuwandeln um 1 darauf zu addieren). Nun wollte ich nachfragen, ob es in SQL eine einfache Möglichkeit gibt, sich Strings generieren zu lassen, die einem bestimmten Muster folgen und in einer gegebenen Liste NICHT auftauchen.
Als Neuling kommt mir erstmal die Idee, eine Tabelle mit allen möglichen Nummern aufzubauen, in der die belegten markiert sind, sozusagen als FreeMem-Liste dann kann ich suchen, welche in der einen Tabelle sind, aber nicht in der anderen; bei 10-stelligen Nummern, selbst wenn die erste Ziffer feststeht, hätte ich aber dann immer noch eine Datenbank von 1 Milliarde Einträgen, und das scheint mir dann doch etwas übertrieben, wenn man "nur" im Bereich von wenigen Tausend Nummern verwalten will. Eine andere Möglichkeit wäre, per VB in eine Schleife alle Nummern zu überprüfen, bis eine nicht existente gefunden wird, aber davon abgesehen, dass die Laufzeit dann von dem Füllstand der Datenbank abhängt, dauert das auch bei entsprechendem Füllstand grundsätzlich zu lange, als dass man es dem User zumuten könnte, deshalb hoffe ich, dass ich diese Arbeit durch eine SQL-Abfrage dem SQL-Server aufbürden kann.
Ich hoffe, dass jemand, der etwas mehr Ahnung von SQL hat, hier die richtige Idee hat.
Schon mal danke
Martin Dietz
Comment