T-Back Geschrieben 15. November 2011 Teilen Geschrieben 15. November 2011 Hallo Leute! Könnte mir bitte einer weiterhelfen? Es handelt sich um eine SQL-SErver 2008 R2 Datenbank Ich habe eine Tabelle mit folgenden Spalten (darunter sind die Datentypen): ID, UserID, KategorieID, Datum, Zeit int, int, int, date, time(7) Die Spalte ID ist der Primärschlüssel. Ich habe folgendes Problem: Ich möchte div. Gespeicherte Prozeduren für die Tabelle erstellen und möchte sobald ich die Gespeicherten Prozeduren aufrufe, dass dann automatisch das aktuelle Datum und die aktuelle Uhrzeit in die dafür vorgesehen Felder geschrieben werden. Ich habe es schon so probiert für die Gesp.Proz. New CREATE PROC spAktionNew @UserID int, @KatID int, @Datum date = GetDate() @Zeit time = GetDate() Aber da kamen immer wieder Fehler! Könntet Ihr mir bitte sagen, wie ich die Gesp.Prozedur schreiben muss? Das wäre sehr nett von euch! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 Geh mal ins Management Studio und schau dir an, was SELECT GetDate() ausgibt. Das könnte dir eine Idee vermitteln in welche Richtung es gehen könnte. Google-Suche "t-sql getdate" -> erster Treffer -> GETDATE (Transact-SQL) Aber da kamen immer wieder Fehler! Auch danach kann man suchen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 Warum eine Prozedur? Wenn Du protokollieren willst, wann sich der Datensatz zuletzt geändert hat würde man bei einem On-Update bzw On-Create das Feld direkt via Trigger setzen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 Warum eine Prozedur? Wenn Du protokollieren willst, wann sich der Datensatz zuletzt geändert hat würde man bei einem On-Update bzw On-Create das Feld direkt via Trigger setzen ... Es handelt sich um eine SQL-SErver 2008 R2 Datenbank Ab dem Sql Server 2008 gibt es die Möglichkeit mittels Change data capture Änderungen an Daten nachzuverfolgen. Möglicherweise findest du in dem Bereich eine Lösung zu deinem Problem. Der Trigger wird auch funktionieren. Die mögliche Lösung ist abhängig von den Anforderungen die du hast/bekommen hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 Ab dem Sql Server 2008 gibt es die Möglichkeit mittels Change data capture Änderungen an Daten nachzuverfolgen. Das kannte ich nicht, ich hätte es via Trigger gelöst, da ich eher mit OpenSources Systemen wie mySQL und Postgresql arbeite. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 Trigger sind ja auch prädestiniert dafür. In Abhängigkeit des DBMS und des Problems was zu lösen ist, gibt es halt mehrere Möglichkeiten. Wir evaluieren gerade Möglichkeiten, wie wir Systemweit "Telemetriedaten" sammeln können. Deswegen viel mir der CDC wieder ein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 16. November 2011 Teilen Geschrieben 16. November 2011 zum Thema Stored Procedure .... Wenn du das Datum allgemein auf getdate() setzen möchtest, dann brauchst du das nicht als Parameter der Procedure. Im Endeffekt deklarierst du in deinem Code oben das Datum als Optionalen Parameter, mit dem default Wert getdate(). Afaik würde das auch nicht funktionieren, einen Funktionsaufruf als Default Wert zu hinterlegen. Ich werds heute nicht mehr testen, aber ich zweifle dass das akzeptiert wird. Davon abgesehen kannst du da alles mögliche als Datum übergeben, nur wenn der Parameter nicht im Aufruf übergeben wird, hättest du da getdate(). Was du tun kannst ist : CREATE PROC spAktionNew @UserID int, @KatID int /*@datum datetime = NULL */ AS BEGIN declare @Datum datetime = GetDate() -- warum 1x date und 1x time ? /*set @datum = isnull(@datum, getdate()) */ .... END Auskommentiert wäre wie ich @datum als optionalen Parameter anlegen würde. Ansonsten hast du von den Vorpostern reichlich alternative Vorschläge Erstellungs / Änderungsdatum zu speichern. Für eine Allgemeine Lösung würde ich vermutlich (mit fehlt der Hintergrund des Ganzen),zu Triggern tendieren, da kannst du dir z.b. dann auch den SQL User der die Änderung durchgeführt hat wegschreiben. Gruß Sven Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.