Zitat Zitat von M.Kasper
Nur wie könnte man dann sicherstellen, dass der Aufruf dieser Funktion (Ermittlung der max. Produktnummer +1) aus der Stored Procedure das selbe Ergebniss liefert, wie aus dem zugehörigen Trigger (die Aufrufe erfolgen zeitlich versetzt und in der Zwischenzeit könnte ja ein andere Job die selbe Funktion aufrufen).
Eigentlich macht man so etwas über Identity Columns, die in den physischen Tabellen definiert werden und nicht über Trigger. Die Verwendung von Identity Columns ist auf alle Fälle performanter als Trigger, da bei einem Trigger immer ein dynamischer Programmaufruf initiiert wird, während bei der Identity Column der Datenbankenmanager den nächsten Wert direkt aus einer Datenstruktur ausliest, diese aktualisiert und auch gleich Folgewerte bereitstellt. Der nächste Wert wird immer ermittelt, unabhängig, wie der Datensatz erstellt wurde, also auch bei native I/O (z.B. über OpCode WRITE in RPG)

Der aktuelle Wert des zuletzt eingefügten Satzes kann über die skalare Funktion IDENTITY_VAL_LOCAL ermittelt werden.
Bei dieser Funktion wird der letzte in dem aktuellen Job vergebene Wert der Identity Spalte zurückgeliefert, auch dann wenn zwischenzeitlich durch andere Jobs weitere Sätze geschrieben wurden.

Um diese Funktionalitäten benutzen zu können, müsstest Du allerdings die Datei/Tabelle über CREATE TABLE neu erstellen. Über der Identity Column MUSS auf alle Fälle ein Unique Index (oder auch DDS-beschriebene logische Datei mit Schlüssel-Wort UNIQUE) angelegt werden. Sollte der eindeutige Zugriffsweg fehlen, kann nicht sichergestellt werden, dass bei Änderung des Start-Wertes oder bei einem Überlauf keine Duplikate erstellt werden.

Birgitta