Timer o.ä. in SQL CLR-Trigger
-
Hi Leute,
ich schreibe gerade einen Trigger für den MSSQL-Server 2005 in C#. Dort soll beim Auslösen des Triggers ein Timer gestartet werden und erst nach Ablauf des Timers soll eine bestimmte Aktion ausgeführt werden. Gibt es da im SQL-Server schon etwas fertiges? Das coolste wäre eine SP die ich Aufrufe, die dann nach Ablauf der Zeit einen Trigger auslöst.
Danke für eure Hilfe.
-
Hi, was fertiges gibt es schon, sowas ähnliches wie ein Workflow namens Sql Server Agent. Hier kannst du Aufträge erstellen und zu bestimmten Zeiten ausführen lassen usw (halt wie Workflows).
per T-SQL mal folgende Prozeduren anschauen:
sp_add_job
und
sp_add_schedule
Kleiner Tipp: Das schöne beim SQL-Server ist, dass man von den Wizards einen SQL Script generieren lassen kann. Also, am besten einen Aufrag per rechte Maustaste über Sql Server-Agent erstellen und das Script anzeigen lassen, ändern, procedure generieren und im trigger ausführen lassen.
Nicht vergessen: Das ganze auf Einmalaktion setzen.
-
Hi Scania,
danke für deine Antwort, das hört sich schonmal gut an.
Leider habe ich den SQL-Server-Agent nicht gefunden? Gibt es den bei der Express-Version auch? Habe auch die beiden von dir genannten SPs nicht gefunden.
-
ok, laut Google ist der SQL-Server-Agent nciht beim Express dabei. Leider ist Express eine zwingende Voraussetzung, daran kann ich ncihts ändern...
-
Unten Rechts in der Taskparleiste, mach doch mal den Sql Server Dienst Manager auf (Datenbankicon) und schau mal unter Dienste nach, ob der SQL Server Agent da drin steht.
Frage hast du das kleine Pakett vom Express oder das große? SQL Express Advanced oder wie der heißt.
-
In der Express Erweiterung ist scheinbar auch nicht drin (Interesant!
), das der Express kein Agent hat ist ja schon fast ne Beleidigung.
Naja, Über CLR den .NET Timer aufrufen wäre noch ne Idee, du scheinst eh mit CLR zu arbeiten. Achtung die Performance geht dann aber nach unten. Ansonsten wüsste ich nicht welche Event-System im SQL-Server noch vorhanden wäre.
-
Wieso geht die Performance nach unten, wenn ich den .NET-Timer verwende?
-
Auf der Sql Server Veranstalltung wurde mal erwähnt, dass man mit CLR sparsam umgehen sollte, nicht alles mit CLR machen sollte, da T-SQL immer noch von der Gechwindigkeit ungeschlagen ist. Außerdem sind einige Resourcen und Methoden gesperrt, z.B: Environment.Exit() und ich glaube auch Threads, so das man eh nicht alles verwenden kann, bzw. ein paar Tricks anwenden muss. Dieses Prüfen kostet Zeit, ich glaub das Schlagwort dazu ist HostProtection.