![]() |
Datenbank: MS SQL Server • Version: 2000 • Zugriff über: ADO
Datensätze nach Buchstaben einfügen
ich habe in einer Datenbank folgende Felder:
Positionsnummer : Integer A_Position : varchar(1) Die einzelnen Positionen können z. B. folgende Werte annehmen: (Positionsnummer) beliebige Zahl; (A_Position) Buchstabe a-z z.B. 1 2 3 3a 4 4a 4b 5 6 7 7a 8 9 10g wenn der Datensatzcursor nun auf irgendeiner Zeile steht, soll geprüft werden ob hier noch eine Position im Zusammenhang mit einem Buchstaben (Feld A_Position) eingefügt werden kann ! (Beispiele anhand der o.g. Auflistung) DSCursor steht auf 2 - Einfügen 2a DSCursor steht auf 4a - Einfügen 4c (da es 4b ja schon gibt) DSCursor steht auf 7a - Einfügen 7b DSCursor steht auf 10g - Einfügen 10a Also immer der nächstmöglich freie Buchstabe ! Wer kann mir bei der Problemlösung helfen? |
Re: Datensätze nach Buchstaben einfügen
Das müsste mit einer Stored Procedure mit if-Abfragen möglich sein. 1. Schritt:
SQL-Code:
2. Schritt:
SELECT COUNT(*) FROM Tabelle
WHERE Positionsnummer = @NeuePosition AND A_Position <> ' ' INTO @Anzahl
SQL-Code:
Du musst die Art der Variablen natürlich an Deinen SQL-Dialekt anpassen. Vielleicht ist es auch für Dich einfacher, das im Programm zu erledigen; deshalb verzichte ich auch darauf, den letzten Teil zu skizzieren, weil es dafür mehrere Wege gibt, und der günstigste hängt eben von dem Dir Möglichen ab.
IF (@Anzahl = 0)
THEN A_Position = 'a'; ELSE BEGIN /* suche im String 'abcde...z' den kleinsten noch nicht benutzten Buchstaben */ END Viel Erfolg! Jürgen |
Re: Datensätze nach Buchstaben einfügen
Danke für den Tip,
ich wollte das aber nicht mit einer Stored Procedure lösen ! |
Re: Datensätze nach Buchstaben einfügen
SP war nur ein Vorschlag; aber das, was ich so skizziert habe, kannst Du genauso auch direkt im Programm erledigen. Jürgen
|
Re: Datensätze nach Buchstaben einfügen
Hallo,
die Beispiele in Beitrag #1 scheinen mir nicht konsistent zu sein. Ich hätte erwartet, dass bei Cursor auf (10, 'g') nicht (10, 'a') sondern (10, ' ') eingefügt würde. Vor allen Dingen würde ich bei der alpha-position keinen NULL-Wert oder Leerstring zulassen. Ein Blank wäre okay, der Feldtyp sollte dann von varchar(1) auf char(1) geändert werden. Mit diesen Korrekturen und einer Lookup-Tabelle LETTERS (LETTER), welche alle gültigen alpha-position Werte enthält, lässt sich der "nächste" Buchstabe leicht ermitteln:
SQL-Code:
Der Code könnte entsprechend angepasst gut in einem Trigger untergebracht werden. Es gibt aber sicher noch andere Wege.
select min(letter)
from letters where letter not in (select alphapos from items where numpos = 10) Grüße vom marabu |
Re: Datensätze nach Buchstaben einfügen
Gute Lösungsvorschläge.
Hab den Feldtyp auch auf Char(1) geändert. Besonders die Lösung von Marabu hat mich auf weitere Ideen gebracht. Vielen Dank nochmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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