Mehrere Datumsfunktionen in ein Funktionsscript, Table-valued oder Scalar-valued Funktion

mindhunter

Benutzer
Beiträge
22
Hi,
in einer SQL-DB soll nach Eingabe oder Update ein Datum in neue Felder zerlegt werden. Das Datum z.B. 2014-10-20 soll in Monat (10), Jahr (2014) zerlegt werden. Also eine Eingabe (Datum) und zwei Ausgaben (Jahr, Monat). Falls das funktionieren würde, dann würde ich noch mehr Datumsfunktionen einbauen wollen.
Mir ist nicht ganz so klar, ob es eine Table-valued oder Scalar-valued Funktion sein soll. Den Unterschied habe ich noch nicht verstanden. Vom Gefühl her wird es wohl eine Table-valued Funktion sein. Kann ich nun zwei Funktionen in ein Script schreiben oder sind dazu zwei Funktionen notwendig?


YEAR('2014-10-20') AS JAHR
MONTH('2014-10-20') AS MONAT

Liebe Grüße und Danke für die Hilfe
Stefan
 
Werbung:
Verstehe nicht wozu das gut sein soll. Du kannst doch einfach das Datum speichern und bei der Ausgabe mit year() oder datepart(yyyy,<spalte>) darauf zugreifen. Warum sollte man die Informationen redundant speichern?
 
Also zum sortieren kannst du ebenfalls Funktionen verwenden, gleiches gilt für die Ausgabe eines Selects um die Daten in irgendwelche Felder zu laden. Das ganze könnte auch per View vereinfacht werden.

Wenn ich das richtig verstehe möchtest du die Werte zerlegen, in Felder laden und dann vermutlich auch ändern und wieder in die Tabelle schreiben können. Ich habe mir das mit den valued functions mal hier angeguckt (habe ich noch nie genutzt) http://www.codeproject.com/Articles/167399/Using-Table-Valued-Functions-in-SQL-Server und würde mal vermuten das du damit deine Werte auch nicht wieder speichern kannst, ähnlich wie bei einer View.

PS: Okay wenn man weiter ließt scheint das auch zu gehen, prinzipiell ließe sich das aber auch mit einem Trigger und zusätzlichen Spalten umsetzen und wäre einfacher zu verstehen :)
 
Ich glaube mit einem Trigger ist es einfacher. Können hier die beiden Datumsfunktionen so eingesetzt werden? Sorry, bin noch total neu in dem SQL-Thema! :confused:
 
Werbung:
Klar, du musst nur unterscheiden wann der Trigger ein Datum in seine Bestandteile zerlegen soll und in die jeweiligen Felder eintragen soll und wann die einzelnen Werte gezielt von deiner Maske verändert werden. Also z.B. nur wenn sie leer sind.

Und bedenke das ein Trigger pro UPDATE oder INSERT Statement nur einmal feuert. Aktuallisierst du zwei Zeilen auf einmal und dein Trigger behandelt nur Eine passiert in der Anderen gar nichts.
 
Zurück
Oben