Function als benutzerdefinierte Sequence

13/02/2009 - 16:30 von mops05 | Report spam
Hallo,

ich benötige für laufende Nummern, die sich anhand benutzerdefinierter
Vorgaben ergeben. d.h. ich möchte für Kategorie A pro Datum eine laufende
Nummer und eine für Kategorie B.
Jetzt habe ich gedacht, ich erzeuge mir eine Tabelle mit 2 Spalten

Kategorie + Datum | lfd_Nummer
-|
A20090213 | 1
A20090213 | 2
A20090214 | 1
B20090213 | 1
B20090213 | 2

Da ich die eindeutige Nummer in SELECT-Statements verwenden möchte, habe ich
mir eine Function erzeugt, in der zum einen für die Kombination
Kategorie/Datum eine neue max. laufende Nummer ermittelt und auch in die
Tabelle eingetragen werden soll. Das Speichern der Function schlug mit der
Fehlermeldung "Ungültige Verwendung des Operators mit Nebenwirkungen order
Zeitabhàngigkeit in 'INSERT' innerhalb einer Funktion" fehl. Nachdem ich das
INSERT-Statement in eine Prozedur ausgelagert hatte, und anstelle des
INSERT-Statements ein EXEC dieser Prozedur in die Function eingefügt habe,
konnte die Function fehlerfrei gespeichert werden. Leider erhalte ich jetzt
beim Aufruf der Function folgende Fehlermeldung: "Nur Funktionen und
erweiterte gespeicherte Prozeduren können innerhalb einer Funktion ausgeführt
werden."

Hat vielleicht jemand eine Idee, wie ich mein Probelm lsöen kann?


Vielen Dank im voraus,
Thomas
 

Lesen sie die antworten

#1 Christoph Muthmann
17/02/2009 - 10:20 | Warnen spam
mops05 wrote:
Hallo,

ich benötige für laufende Nummern, die sich anhand benutzerdefinierter
Vorgaben ergeben. d.h. ich möchte für Kategorie A pro Datum eine
laufende Nummer und eine für Kategorie B.
Jetzt habe ich gedacht, ich erzeuge mir eine Tabelle mit 2 Spalten
[snip]



Hallo Thomas,
es gibt einen Artikel dazu, wie man Oracle Sequencen in T-SQL nachbildet:
http://www.sqlmag.com/Articles/Arti....html?Ad=1

Die Lösung dort geht auch über eine Prozedur für den nàchsten Wert. Ursache
dürften die von Dir gefundenen Einschrànkungen für Functions sein.


Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org

Ähnliche fragen