Tom: Automatisches Aufnummerieren in einer Abfrage

Beitrag lesen

Guten Tag

Erst einmal Danke an Cruz, brand und Michael.

Michael:

Reden wir von SQL, oder von einer abgemagerten real existierenden Implementierung?

Letztendlich muss ich die Lösung schon auf einer real existierenden Implementation umsetzen. ;-)
Diese ist: Front-End in MS-Access, Zugriff über ODBC auf MS-SQL 7.0.

Da nun Oracle <> MS-SQL (ja ich weiss, Oracle ist eine richtige DB ;-)) habe ich nun keine Möglichkeit, eine Sequenz zu erzeugen.
Dies steht sogar explizit im Manual zu MS-SQL:
<cite page="Data Types in Oracle and SQL Server">
   Sequences and the IDENTITY Property
   If your Oracle application currently uses sequences to generate sequential numeric values, it can be altered to take advantage of the SQL Server IDENTITY property. The primary difference between SQL Server and Oracle is that the IDENTITY property is actually part of the column, while a sequence is independent of any tables or columns.
</cite>
Da in der Tabelle aber nicht alle Datensätze automatisch eine Rechn-Nr. bekommen sollen, fällt der Einsatz der Identity-Eigenschaft flach. Schade :-(

Brand:

Wenn die ID der Datensätze lückenlos aufnummeriert sind, könntest du die Rechnungsnummer doch aus der ID errechnen?

Geht nicht, da die IDs unabhängig von der Rechnungsstellung sind (ich habe Datensätze in der realen Tabelle, die keine Rechnung bekommen sollen).

Brand:

Oder du machst es doch in einer Schleife und merkst dir welche Datensätze du verändert hast (eventuell ein zusätzliches Feld in der Table in dem du anmerkst, daß die Rechnungsnr dieses Feldes gerade erzeugt wurde)

Cruz:

Ok noch eine Idee...wie wäre es, wenn du mit dem Script gleichzeitig noch eine Undo History generierst, das nichts weiter ist, als eine Text Datei mit SQL Statements, die die RechngNr = NULL setzen für alle in dieser Session bearbeiteten Zeilen. Wenn irgendwas schifgeht drückst du auf UNDO und alle diese Statements werden schön abgearbeitet und alles ist wieder wie vorher.

Diese Vorschläge werde ich kombinieren.

Es wird ein zusätzliches Feld 'RechCheck' geben, in dem ich während des Schleifendurchlaufs gleichzeitig mit dem Setzen der RechNr ein Wert setze.
Ist der ganze Vorgang erfolgreich abgeschlossen, so werde ich mit einem Update-Statement das Feld 'RechCheck' auf Null setzten, andernfalls wird das Feld 'RechNr' und 'RechCheck' auf Null gesetzt, falls das Feld 'RechCheck' nicht Null war.

Danke an alle Beteiligten für die Mitarbeit an einer Lösung.

Grüsse
Tom